2017-04-15 6 views
0

Cで簡単なプログラムを書いて、別々のユーザー入力を割り当てて配列を連結します。ユーザー入力が別々の配列に割り当てられています。(c)

しかし、ユーザー入力の文字列にスペースが含まれていると、1ワードが配列1に割り当てられ、もう1ワードが配列2に割り当てられることが分かりました。空間は最初のscanf(で入力された場合、図から分かるように

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

)は、第2のscanf() 'スキップ' して、単語をSTR1にsparatedさ[]とstr2 []は。私はこれを引き起こしているのだろうと私の目標を達成するよりエレガントな方法があるのだろうか?

SIZEはスペースscanf("%[^\n]s", str1);を使用して、あなたのプログラムが動作すると、文字列の入力を取るために100

+1

'%s'形式の動作を確認するには、マニュアルページを読む時間がかかるでしょう。 –

答えて

0

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

のfgets()を文字としてスペースを受け入れてください。 また、ユーザーが許可されている長さよりも長い文字列を入力した場合、scanf()はセグメント障害を引き起こしますが、fgets()は文字オーバーフローを無視し、その変数に割り当てられたものだけを受け入れます。

+0

偉大な、それは完璧に働いている!私はちょうど別のユーザーが同様の質問に残したリンクをたどりました(私はこの質問を探していましたが、それを見つけることができませんでした)、彼らは同様の答えを出しました。 –

1

として50およびSIZE2として定義されます。 str2にはscanf(" %[^\n]s", str2);を使用してください。基本的には、改行に遭遇するまで文字列を読み込むことを意味します。

+0

これを使用して2つの入力を聞いたことがありますか?何が起こった? –

+0

私は答えを更新しました。 –

関連する問題