用户输入被分配给单独的数组(c)

时间:2017-04-15 17:56:30

标签: c arrays string

我在C中编写一个简单的程序,将两个单独的用户输入分配给单独的数组,然后连接数组。

但是,我发现如果用户输入的字符串中包含一个空格,则将一个字分配给数组1,将另一个字分配给数组2.我的代码在下面。

char str1[SIZE];
char str2[SIZE];
char str3[SIZE2];

printf("Enter a string: ");
scanf("%s", str1);

printf("\nEnter another: ");
scanf("%s", str2);

printf("\n\nInput 1: %s\n", str1);
printf("Input 2: %s\n", str2);

Here's the code in execution

可以看出,如果在第一个scanf()中输入空格,则第二个scanf()被“跳过”,并且这些单词被分为str1 []和str2 []。我想知道造成这种情况的原因是什么,是否有更优雅的方式来实现我的目标?

SIZE定义为50,SIZE2定义为100

2 个答案:

答案 0 :(得分:1)

要使用scanf("%[^\n]s", str1);输入带空格的字符串,您的程序将起作用。对{2}使用scanf(" %[^\n]s", str2);。它基本上意味着在遇到换行符之前读取字符串。

答案 1 :(得分:0)

尝试

 fgets( str1, sizeof(str1), stdin );

fgets()接受空格作为角色。 而且,如果用户输入的字符串长度大于允许的长度,则scanf()会导致段错误,但fgets()会忽略字符溢出并接受为该变量分配的内容。