我正在攻读考试,我对Unix中的规范与非规范输入/输出的工作原理感到困惑(例如,curses).我知道有一个缓冲区,"行规则"应用于规范输入.这是否意味着缓冲区被旁路用于非规范输入,还是仅仅意味着没有应用线路规则?输入和输出操作的这个过程有何不同?
在我使用的curses程序中演示了规范输入,用户输入的输入是在键入一定数量的字符或经过一定时间后自动输入的.这些事情中的任何一个都被视为"线条学科"还是完全不同于其他事情?
在这里,我在接受的答案中看到了这个陈述:
大多数转换说明符都跳过前导空格,包括换行符但
%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;
}
Run Code Online (Sandbox Code Playgroud)
交换两个scanf小号解决了问题,以及在(注释)getchar,否则'\n'该第一插入将由所述第二消耗scanf与%c.我在linux和windows上测试了gcc,行为是一样的:
gcc(GCC)4.7.2 20120921(Red Hat 4.7.2-2)
版权所有(C)2012 Free Software Foundation,Inc.
这是免费软件; 查看复制条件的来源.没有保修; 甚至不适用于适销性或特定用途的适用性.
所以我的问题是:为什么%d和%c行为不同WRT '\n'的scanf?