当输入不是指定格式时,scanf()如何读取?

当输入不是指定格式时,scanf()如何读取?,c,C,以下程序的输入和输出如下: #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; } #包括 int main(){ int a=0,b=100,c=200; scanf(“%d,%d,%d”,&a,&b,&c); printf(“%d%d%d\n”,a、b、c); 返回0;

以下程序的输入和输出如下:

#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;
}
#包括
int main(){
int a=0,b=100,c=200;
scanf(“%d,%d,%d”,&a,&b,&c);
printf(“%d%d%d\n”,a、b、c);
返回0;
}
输入-1:

1,2,3

输出-1:

1 2 3

因此,第一个输出是正确的,正如预期的那样

输入-2:

1 2 3

输出-2:

1100 200

在这里,它正确地读取第一个整数,但我无法理解,
scanf()

由于在第一个整数之后输入的值未分配给任何变量,这些值会发生什么变化


它们是否写在一些随机存储器位置上?

TL;答:没有。它停止阅读

为了澄清,
输入不是指定格式
scanf()
的匹配失败。这就是为什么总是建议检查
scanf()
的返回值,以确保成功扫描所有输入项目

在第二个输入场景中,
scanf()
未能扫描所有输入参数,因为预期输入和接收输入的格式不匹配[您对此一无所知]。只有
a
的值已成功扫描并反映出来

[为了答案的完整性]:

输入值
a
后,由于输入中缺少
,发生了不匹配,
scanf()
停止扫描,返回值
1
。这就是为什么,
b
c
会打印出它们的初始值

这里它正确读取第一个整数,但我无法理解, 当我们不是整数时,scanf()如何读取第一个整数后的数据 是否以指定格式提供输入

scanf
在第一次不匹配时停止,其余目标对象保持不变。您可以检查返回值以确定匹配的“项”数

因为在第一个整数之后输入的值不会分配给任何 变量,这些值会发生什么变化

不匹配的数据保留在输入缓冲区中,可供后续使用
scanf
fgets
等进行读取


在中的最后一个printf()语句之后,我使用了getchar()和putchar() 程序,但没有读取任何内容

奇怪。您应该能够通过以下方式逃脱:

int ch;
while ((ch = getc(stdin)) != EOF)
    putchar(ch);

这不是因为scanf中的逗号吗?因为如果你把这些都拿走了works@Rizier123是的,提供的格式必须与提供的输入完全匹配。
scanf()
将返回成功读取的整数数,在本例中为1,那么如何检查它是否为错误?如果成功,则应为3,而不是1。另外,它不是整数的数量,而是成功扫描的输入项目的数量,我对你的第一个答案非常满意,但是你能告诉我如何读取剩下的数据吗?我在程序中最后一个printf()语句之后使用了getchar()和putchar(),但没有读取任何内容。