2016-03-28 10 views
0

をスキップしています。私の第二scanfのは()

出力は次のようになります。 リンゴとオレンジ

あなたの2つの以上の好きな果物は何ですか: (入力を待ちません)

あなたの2つの好きな果物は何ですか

これを解決するにはどうすればよいですか?

+5

何*あなたの実際の入力*ですか? 「スキップした」とはどういう意味ですか?関数呼び出しの戻り値を確認しましたか? 's1'と' s2'とは何ですか?そして、*私たちを見せるために、[最小、完全、そして実証可能な例](http://stackoverflow.com/help/mcve)を作成しようとしてください。 –

+1

文字列であるので 's1'と' s2'の前に '&'を使わないでください。 – Cherubim

+0

私にとってうまく動作します(第2引数から '&'を取り除くのはポインタなので)。 – stackptr

答えて

2

scanf()%sは、空白を含む文字列を受け入れません。ホワイトスペースを持つ文字列の

、これは改行文字「\n」まですべてを読んでいましたfgets()またはscanf("%[^\n]s", string);
を使用しています。例えば

printf("What are your 2 favourite fruits:\n"); 
scanf("%[^\n]s", s1); 
printf("What are your 2 least favourite fruits:\n"); 
scanf("%[^\n]s", s2); 
+1

'%[^ \ n]'は改行まで読み込むのに十分であることに注意してください。 's'は何にもマッチしませんが、失敗したとは決して言えません。 (%[^ \ n]は完全な変換仕様であり、角括弧は '%s'変換仕様の修飾語ではありませんが、完全に別の変換仕様です。 \ n] ''%s'は先行する空白をスキップし、次に空白以外の空白文字のシーケンスと一致し、次の行で停止します空白 "となる。 –

関連する問題