程序在接受C中的输入中的第二个字符串之前运行

我试图运行以下代码但程序只接受一个字符串并立即显示输出而不等待输入第二个字符串。 该程序用于2字符串连接。 这是代码: –

#include  main() { int i, j, len=0; char name[100], abc[100]; printf("\nPlease Enter String 1 =\t"); scanf("%[^\n]c",&name); printf("\nPlease Enter String 2 =\t"); scanf("%[^\n]c",&abc); for(i=0; name[i]!='\0'; i++) len++; for(j=0; abc[j]!='\0'; j++) { len++; name[len]=abc[j]; } printf("\nThe Concatenated String Is =\t"); puts(name); } 

我想建议你不要使用scanf 。 最好用fgets代替。
顺便说一下,程序只接受一个字符串并立即显示输出而不等待第二个字符串输入的原因是按下Enter键后第一个scanf留下的\n字符。 要吃掉这个换行符,你可以在第一次gatchar()后使用gatchar()

 printf("\nPlease Enter String 1 =\t"); scanf("%[^\n]c",name); getchar(); printf("\nPlease Enter String 2 =\t"); scanf("%[^\n]c",abc); 

其他两个错误是:
1.错误的增量

 for(i=0; name[i]!='\0'; i++) len++; for(j=0; abc[j]!='\0'; j++) { name[len++]=abc[j]; } 

2.奇怪输出的原因是字符串未终止NUL。 在第二个for循环后添加此行。

 name[len] = '\0'; // add this to null terminate your string. 

这是您的工作代码

使用fgets而不是scanf,你也在错误的位置增加len:

 #include  #include  int main() { int len = 0; char name[100], abc[100]; printf("\nPlease Enter String 1 =\t"); fgets(name, 100, stdin); len = strlen(name) - 1; name[len] = 0; printf("\nPlease Enter String 2 =\t"); fgets(abc, 100, stdin); abc[strlen(abc) - 1] = 0; strcpy(name+len, abc); printf("\nThe Concatenated String Is =\t"); puts(name); return 0; } 

请改用以下scanf

 scanf("%[^\n]",name); ..... scanf(" %[^\n]",abc); 

有关如何使用scanf()更多详细信息,请参阅此scanf()手册页。

你必须扔掉换行符(’\ n’)。

尝试:

 while(getchar() != '\n') continue; 

每次scanf

应该

 scanf("%[^\n]%*c", name); printf("\nPlease Enter String 2 =\t"); scanf("%[^\n]%*c", abc); for(i=0;name[i]!='\0';i++) len++; for(j=0;abc[j]!='\0';j++){ name[len]=abc[j]; len++; } name[len]='\0';