以下程序的输入和输出如下:
#include<stdio.h>
int main(){
int a=0, b=100, c=200;
scanf("%d,%d,%d",&a,&b,&c);
printf("%d %d %d\n",a,b,c);
return 0;
}
输入-1:
1,2,3
输出-1:
1 2 3
所以第一个输出是正确的,正如预期的那样。
输入-2:
1 2 3
输出-2:
1 100 200
这里它正确地读取了第一个整数但是我无法理解,当我们没有以指定格式给出输入时,scanf()
如何在第一个整数之后读取数据?
由于在第一个整数之后输入的值未分配给任何变量,这些值会发生什么变化?
它们是写在一些随机存储位置上的吗?
答案 0 :(得分:6)
这里它正确读取第一个整数,但我无法理解, 当我们不是时,scanf()如何在第一个整数之后读取数据 以指定格式提供输入?
scanf
在第一个不匹配时停止,并保持其余目标对象不变。您可以检查返回值以确定“scanf
匹配的”项目数。
由于在第一个整数之后输入的值未分配给任何值 变量,这些值会发生什么变化?
不匹配的数据保留在输入缓冲区中,可以使用scanf
,fgets
等进行后续读取。
我在最后一个printf()语句之后使用了getchar()和putchar() 程序但没有读过。
奇怪。你应该能够逃脱:
int ch;
while ((ch = getc(stdin)) != EOF)
putchar(ch);
答案 1 :(得分:3)
TL; DR回答:事实并非如此。它停止阅读。
为了澄清,input is not in specified format
是scanf()
的匹配失败。这就是为什么始终建议检查scanf()
的返回值,以确保所有 所有成功扫描的输入项。
在第二个输入方案中,scanf()
无法扫描所有输入参数,因为期望和收到<的格式不匹配/ em>输入[你根本不知道]。只有a
的值已成功扫描并反映出来。
[仅为了答案的完整性]:
输入值a
后,由于输入中没有,
,发生了不匹配,scanf()
停止了扫描,返回值1
。这就是为什么b
和c
打印出它们的初始值。