当输入不是指定格式时,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(),但没有读取任何内容。