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

标签 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;
}

应该有一些东西而不是 EOF在检查行尾的 while 循环中。最终结果应该是 s[] 中的单词数组并且程序应该打印不带空格的单词数组。

最佳答案

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

相反,请使用以下内容

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

这样,它不会在空白字符处停止,其行为类似于 fgets(),只不过它不读取 '\n' 字符如果您再次调用它,可能会出现问题。

关于c - 使用 scanf 扫描一行带空格的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42595386/

相关文章:

reactjs - 输入值 onChange - React Hooks

c - 循环内的 fscanf

c - sscanf : skip any number of given chars

objective-c - 为什么具有负值的枚举会导致 Objective-C/C 出现问题?

c - 如何确定堆栈中保存的值?

C(基本内容)- 将用户输入写入文件

C语言读写文件的澄清

c - 如何从一个文件中读取多个问题?

c - 在 C 中使用共享内存添加数组元素

c - 在C中发出EOF信号之前,如何保持扫描输入?