2017-04-15 39 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

我已經更新了答案。 –

相關問題