在这里,我在接受的答案中看到了这个声明:
大多数转换说明符会跳过包括换行符在内的前导空格,但
%c
不会。
对我来说,不清楚这种不同行为的基本原理,我会期待一个统一的行为(例如总是跳过或从不)。
我用这样的一段 C 代码遇到了这种问题:
#include "stdio.h"
int main(void){
char ch;
int actualNum;
printf("Insert a number: ");
scanf("%d", &actualNum);
// getchar();
printf("Insert a character: ");
scanf("%c", &ch);
return 0;
}
交换两个scanf
s 和 (commented) 可以解决问题,getchar
否则'\n'
第一个插入的 s 将被第二个scanf
with消耗%c
。我在 linux 和 windows 上都在 gcc 上进行了测试,行为是一样的:
gcc (GCC) 4.7.2 20120921 (Red Hat 4.7.2-2)
版权所有 (C) 2012 Free Software Foundation, Inc.
这是免费软件;查看复制条件的来源。没有保修;甚至不考虑适销性或特定用途的适用性。
所以我的问题是:为什么%d
和%c
行为不同?'\n'
scanf