This question already has an answer here:
I want to write a sub-program in which a user can input their comment.
I use scanf("%s", X)
and let them input a comment, but it can only store the word before a space bar in the string.
How can I solve this problem in order to store a whole sentence into a string or a file?
My code is presented below:
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);
Rather than the answers that tell you not to use
scanf()
, you can just the the Negated scanset option ofscanf()
:You can make use of
gets()
,getline()
functions to read string fromstdin
.scanf() with
%s
as format specifier reads a sequence of characters starting from the first non-whitespace character until (1) another whitespace character or (2) upto the field width if specified (e.g.scanf("%127s",str);
-- read 127 characters and appends null byte as 128th), whichever comes first. And then automatically append null byte at the end. The pointer passed my be large enough to hold the input sequence of characters.You can use fgets to read the whole line:
Note that fgets reads the newline character as well. You may want to get rid of the newline character from the
comment
.instead of scanf use
fgets
on stdin in order to read the whole line.