使用scanf扫描一行带空格的字符串

时间:2017-03-04 11:21:28

标签: c input scanf stdio

我在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[]中的一个单词数组,程序应该打印没有空格的单词数组。

1 个答案:

答案 0 :(得分:1)

不幸的是scanf()没有读取您需要检查行尾的字符,或者至少没有使用"%s"作为说明符。

相反,请使用以下

char line[100];
if (scanf("%99[^\n]", line) == 1) {
    fprintf(stdout, "%s\n", line);
}

这样,它不会停留在空白字符处,并且它的行为类似于fgets(),但它不会读取'\n'字符,如果再次调用它可能会出现问题