在这里,我在接受的答案中看到了这个声明:
大多数转换说明符会跳过包括换行符在内的前导空格,但
%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;
}
交换两个scanfs 和 (commented) 可以解决问题,getchar否则'\n'第一个插入的 s 将被第二个scanfwith消耗%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