I am trying to read in a string that may or may not include spaces ex. "hello world". By doing the following with a number select menu that is inputted by the user. This is just a small replica of what I am trying to do.
#include <stdio.h>
#include <string.h>
int main(void){
char line[3][80];
strcpy(line[0],"default line 1\n");
strcpy(line[1],"default line 2\n");
strcpy(line[2],"default line 3\n");
for(int i = 0; i < 3; i++){
printf("%s", line[i]);
}
int option = 0;
printf("would you like to replace line 1? (1 for yes)\n");
scanf("%d",&option);
if(option==1){
printf("what would you like to replace the line with?\n");
fgets(line[0],strlen(line[0]),stdin);
}
for(int i = 0; i < 3; i++){
printf("%s", line[i]);
}
}
Why is it that after I enter 1 to change the line, it prints the statement asking what I want to replace it with and will automatically enter nothing then printing the strings with the first one as empty?
I also have already tried reading the line with sscanf("%[^\n\t]s", line[0]);
without any luck. Any ideas?
fgets
read an eof (end of file) as the first character of the stream. – Confidingscanf("%d", &option)
before when asking if the user would like to replace the line but im not sure if there is a way to fix that. – Stipendstrlen(line[0])
should be replaced by80
. The size of the buffer is not the length of the string it contains, but the total length of the buffer which is80
here. – Aesir