关于c语言scanf函数的

来源:百度知道 编辑:UC知道 时间:2024/05/28 08:07:28
#include <stdio.h>
俺在学习的时候很搞不懂这道题
main()
{
int i=0,j=0,k=0;
scanf("%d",&i);
scanf("%d",&j);
scanf("%d",&k);
printf("%d,%d,%d\n",i,j,k);
}
如果我输入的是12.3 那么程序就结束了 输出结果是 12 0 0
为什么?
这三个scanf语句是分开的阿,是三句阿,为什么我第一个输入错误后面两个就都不用输入了呢? 到底是怎么回事呢? 高人指教指教
我表达错了,我不是想知道应该如何输入程序会正确运行 或者 他会不会出错。 我知道他肯定要出错,我是想知道他为什么出错。为什么下面两个scanf就不执行了呢? 输入 12.3 到底导致了怎样的错误呢? 当我输入 12.3 回车后 程序就结束了 结果是 12 0 0 , 如果我输入 12.3 12.3 12.3 以空格来分隔这三个数 结果还是 12 0 0 为什么呢?

因为第一个scanf()在读取时遇到了无法转换为int型值的数据,所以这些数据就遗留在了缓冲区中,这样到第二个scanf()读取时,会先读取缓冲区中的数据(如果缓冲区为空就从标准输入读取,否则就不会从标准输入读取),结果第二个scanf()也无法将遗留的数据转换为int型值,所以这些数据继续遗留在缓冲区中,第三个scanf()同样要从缓冲区读取上次遗留的数据。所以后两个scanf()均无须再从标准输入(一盘情况下就是键盘)读取数据,而且缓冲区中遗留的数据它们也无法转换。

你定义的i j k都是int型(整型)也就是只认整数部分
你可以试着定义成 flout型~

int表示整数。你应该先输入一个数,回车或空格,再输入一个数,回车或空格,再输入一个数,回车或空格。完了!

scanf("%d",&i); 读取数字字符,是空白字符就结束读入。
而当输入的是字符是,函数认为出错,就结束,就象你自己在程序中你自定义处理出错语句一样。

%d就是按照整数的形式存储变量,所以要是你输入的能够变成整形,就会以整数的形式存在内存中,所以输出的也是整数了。

我感觉你后面两个没有输入并不是你第一个输入错误的问题,第一个输入的应该是没有错误的,只不过是格式不对,要不然也不可能输出12。关键是你在输入完第一个后,以什么结束来输入的下面的。一般应该是空格代表一个输入结束的,要是你按的回车键的话,可能就整个都结束了,那样后面两个就没有输入了。

因为这个题你必须输入整数,当你给i赋值时,要输入12.3,当12输入完之后,再输入点时,出现错误,给i赋值结束,并且跳出赋值语句,而j,k值仍为零,所以结果是1200.