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

时间:2013-11-20 17:05:19

标签: c string gcc

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

#include <stdio.h>

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);
}

5 个答案:

答案 0 :(得分:1)

请改用以下scanf

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

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

答案 1 :(得分:1)

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

#include <stdio.h>
#include <string.h>
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;
}

答案 2 :(得分:1)

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

尝试:

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

每个scanf

之后

答案 3 :(得分:0)

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

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

其他两个错误是:
1. len

的增量错误
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.  

这是您的working Code

答案 4 :(得分:0)

应该是

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';