6

ユーザーがコメントを入力できるサブプログラムを作成したいと考えています。scanf("%s", X)コメントを入力させて使用していますが、文字列のスペースバーの前の単語しか保存できません。

文全体を文字列またはファイルに保存するには、この問題をどのように解決できますか?

私のコードを以下に示します。

FILE *fp;
char comment[100];
fp=fopen("comment.txt","a");
printf("You can input your comment to our system or give opinion to the musics :\n");
scanf("%s",comment);
fputs(comment,fp);
4

4 に答える 4

21

を使用しないように指示する答えではなくscanf()、次の否定スキャンセットオプションを使用できscanf()ます。

scanf("%99[^\n]",comment); // This will read into the string: comment 
                           // everything from the next 99 characters up until 
                           // it gets a newline
于 2012-12-05T17:00:23.823 に答える
11

フォーマット指定子を使用したscanf()%sは、最初の非空白文字から (1) 別の空白文字まで、または (2) 指定されている場合はフィールド幅までの一連の文字を読み取ります (例:scanf("%127s",str);127 文字を読み取り、128 番目として null バイトを追加します))、 いずれか早い方。最後に null バイトを自動的に追加します。ポインターは、文字の入力シーケンスを保持するのに十分な大きさである必要があります。

fgetsを使用して行全体を読み取ることができます。

fgets(comment, sizeof comment, stdin);

fgets は改行文字も読み取ることに注意してください。から改行文字を削除したい場合がありますcomment

于 2012-12-05T15:28:01.493 に答える
3

fgets行全体を読み取るために、stdinでscanfを使用する代わりに。

于 2012-12-05T15:28:38.513 に答える
1

gets()、関数を使用して、getline()から文字列を読み取ることができますstdin

于 2012-12-05T17:32:05.543 に答える