当 space 放入我的 scanf() 时,C double printf()

C double printf() when a space is put in my scanf()

我一直在努力使这段代码正常工作:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char const **argv) {
    char buf[100];
    int var = 0;
    do {
        printf("Write a number :\n");
        scanf("%s", buf);
    } while ((int)strtol(buf, NULL, 10) == 0);

    return 0;
}

在控制台中它是这样的:

chaouchi@chaouchi:~/workspace/Demineur$ ./a.out
Write a number :
f 10
Write a number :
chaouchi@chaouchi:~/workspace/Demineur$

我不明白为什么程序在 while 循环的第二次迭代期间停止并忽略我的 scanf()

步骤如下:

  • 第一次迭代打印 Write a number : 和一个换行符,
  • scanf("%s", buf) 没有可从标准输入读取的内容,因此需要输入,
    • 您键入 f 10 和回车键
    • scanf("%s", buf) 读取 f 并停在 space,
  • strtol(buf, NULL, 10)returns0,所以循环继续
  • 第二次迭代打印 Write a number : 和一个换行符,
  • scanf("%s", buf) 读取 10 并在换行处停止,
  • strtol(buf, NULL, 10)returns10,所以循环退出
  • 程序以 0 状态(成功)结束。

这是您观察到的情况:如果您提供了多个单词,则在从终端请求更多输入之前,多个 scanf() 调用会读取它们。