我有以下程序:int main(int argc,char *argv []){int a,b; char c1,c2; printf(\'输入一些内容:\'); scanf(\'%d \',&a); //第 1 行 printf(&q ...
我有以下程序:
int main(int argc, char *argv[])
{
int a, b;
char c1, c2;
printf("Enter something: ");
scanf("%d", &a); // line 1
printf("Enter other something: ");
scanf("%d", &b); // line 2
printf("Enter a char: ");
scanf("%c", &c1); // line 3
printf("Enter another char: ");
scanf("%c", &c2); // line 4
printf("Done"); // line 5
system("PAUSE");
return 0;
}
正如我在 C 书中读到的,作者说 scanf()
在缓冲区中留下了一个换行符,因此,程序不会在第 4 行停止让用户输入数据,而是存储换行符 c2
并移动到第 5 行。
是吗?
但是,这种情况只发生在 char
数据类型上吗?因为我没有 int
在第 1、2、3 行中看到数据类型的这个问题。对吗?
scanf ()
函数在尝试解析除字符以外的转换之前会自动跳过前导空格。字符格式(主要是 %c
;还有扫描集 %[…]
— 和 %n
)是例外;它们不会跳过空格。
使用 " %c"
前导空格可跳过可选的空格。请勿在 scanf()
格式字符串中使用尾随空格。
请注意,这仍然不会消耗输入流中剩余的任何尾随空格,甚至不会消耗到行尾,因此如果在同一输入流上使用 getchar()
or fgets()
前 跳过空格 其他非字符转换 %d
所做的
请注意,除转换之外的非空白“指令”(使用 POSIX scanf 术语 ),例如中的文字文本 scanf("order = %d", &order);
也不会跳过空格。文字 order
必须与要读取的下一个字符匹配。
,如果您想跳过上一行的换行符但仍然需要在固定字符串上进行文字匹配,那么 " order = %d"
您可能需 就像这个问题一样 .