2017-04-15 52 views
0

我正在用C编写一个简单的程序来分配两个单独的用户输入来分隔数组,然后连接数组。用户输入被分配给单独的数组(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 [] 。我想知道是什么原因造成的,是否有更完美的方式来实现我的目标?

尺寸定义为50至size2 100

+1

我猜,阅读手册页的时间可以看出'%s'格式的行为。 –

回答

0

尝试

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

与fgets()接受空间作为一个字符。 而且,如果用户输入的字符串长度超过允许的值,scanf()将导致段错误,但fgets()会忽略字符溢出并接受为该变量分配的内容。

+0

太棒了,这是完美的工作!我只是跟着另一个用户留下的链接到类似的问题(我已经搜索了这个问题......找不到它),他们给出了类似的答案。 –

1

获得一个字符串的输入与空间使用scanf("%[^\n]s", str1);和你的计划会奏效。对于str2使用scanf(" %[^\n]s", str2);。它基本上意味着读取字符串,直到遇到换行符。

+0

您是否尝试过使用这个问题来处理两个输入?发生了什么? –

+0

我已经更新了答案。 –