【发布时间】:2016-11-11 16:00:41
【问题描述】:
我正在尝试读取可能包含也可能不包含空格的字符串。 “你好世界”。通过用户输入的数字选择菜单执行以下操作。这只是我正在尝试做的一个小副本。
#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]);
}
}
为什么我输入 1 换行后,它会打印语句询问我想用什么替换它,然后会自动输入任何内容,然后打印第一个为空的字符串?
我也已经尝试使用sscanf("%[^\n\t]s", line[0]); 阅读该行,但没有任何运气。有什么想法吗?
【问题讨论】:
-
我猜
fgets读取了一个 eof(文件结尾)作为流的第一个字符。 -
我很确定它与
scanf("%d", &option)有关,之前询问用户是否要替换该行但我不确定是否有办法解决这个问题。 -
与您的问题没有直接关系,但
strlen(line[0])应替换为80。缓冲区的大小不是它包含的字符串的长度,而是缓冲区的总长度,这里是80。