我在C中使用scanf获取所有输入。现在我看到了有关scanf()
的其他类似问题,他们建议使用fgets()
代替scanf()
。我将来会这样做。但是,目前使用scanf()
的代码的这一特定部分似乎永远不会起作用。我知道有一个解决方案。
我的代码是:
#define LENGTH 1000
#define WORD 100
int main(){
int i = 0;
char s[WORD][LENGTH];
do {
scanf("%s", s[i]);
i++;
}
while (s[i][strlen(s[i])] != EOF);
printf("%s\n", s);
return 0;
}
在while循环中应该有一些而不是EOF
来检查行尾。最终结果应该是s[]
中的一个单词数组,程序应该打印没有空格的单词数组。
答案 0 :(得分:1)
不幸的是scanf()
没有读取您需要检查行尾的字符,或者至少没有使用"%s"
作为说明符。
相反,请使用以下
char line[100];
if (scanf("%99[^\n]", line) == 1) {
fprintf(stdout, "%s\n", line);
}
这样,它不会停留在空白字符处,并且它的行为类似于fgets()
,但它不会读取'\n'
字符,如果再次调用它可能会出现问题