c - 为什么 scanf 不能在正式输入末尾使用空格?

标签 c scanf

我正在尝试这个:

    int M,N,K;
    printf("Enter (m,k,n) : ");
    scanf("%d %d %d ", &M, &K, &N);
    printf("\nDone?");

这是在主函数内部。我需要程序读取三个整数,但是当我运行它时,它只读取三个整数,但不会超过 scanf,即“完成?”没有执行,就好像它仍在等待更多输入一样。如果我删除最后一个 %d 之后的空格,它就可以正常工作。但为什么会这样呢?

最佳答案

If I remove the space after the last %d, it works fine. But why is that so?

"%d %d %d " 中的

"" 指示 scanf() 读取而不是保存任意数量的白色- 空格包括'\n'

scanf() 不断消耗空格,直到遇到一些非空格。 @user3121023

"%d %d %d " 强制 scanf() 不返回,直到读取到一些非空白之后 3 个数字。


提示:避免 scanf()。使用fgets(),然后解析字符串@DevSolar

关于c - 为什么 scanf 不能在正式输入末尾使用空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58788629/

相关文章:

c++ - 如何在 C 中显示输出时获取链表索引?

c - 输入、输出 C 程序

c - 带结构的 Fscan

c - 扫描一个大的十六进制值

c - 读取2个数据串

c++ - 如何测试数字是否以值结尾?

c - 在没有库函数的情况下反转字符串 c 会导致段错误

c - 了解 C 程序中的内存泄漏

c - 从 C 字符串中提取 POST 参数

C - scanf 无需直接访问即可更改数组的值