我是C语言的新手,我正在Kim N. King的一本书上研究它。它说scanf()
寻找忽略空格的数字模式,但我认为它也会跳过Enter键。如果它寻找字符,它显然也需要空格。
因此,在此示例代码中,我必须使用getchar()
在第二个scanf()
之前清除流,否则第二个将在不等待用户输入的情况下执行。
printf("Enter a char: ");
scanf("%c", &ch1);
getchar();
printf("\nEnter another char: ");
scanf("%c", &ch2);
如果我寻找数字,我没有问题。
printf("Enter a number: ");
scanf("%d", &n1);
printf("\nEnter another number: ");
scanf("%d", &n2);
我的假设(它跳过Enter键)对吗?
答案 0 :(得分:3)
按 ENTER 键输入newline
(\n
),这是一个空格字符。
引用C11
,章节§7.21.6.2, fscanf()
作为转换规范的指令定义了一组匹配的输入序列,如 下面针对每个说明符进行描述。转换规范按以下步骤执行:
- 跳过输入空白字符(由
醇>isspace
函数指定),除非 该规范包括[
,c
或n
说明符。 [....]
所以,是,任何前导空格(输入缓冲区中的)被跳过或被忽略{{1} }。