永发信息网

每次scanf不是要以回车结束的么?为何这么多scanf只用一次回车??

答案:5  悬赏:0  手机版
解决时间 2021-03-22 22:31
每次scanf不是要以回车结束的么?为何这么多scanf只用一次回车??
最佳答案
scanf 从输入流缓冲区里 读取数值,如果输入缓冲区内已有数值,它就可以取用,如果缓冲区里 没有数值,或数的个数不足,scanf 就要等待。 这是第一点。

第2点,那么 缓冲区里 的数 从何而来?答:是从键盘 缓冲区里来。
键盘 缓冲区 的数据 只有当 遇到 回车键 时 才 送到 输入流缓冲区,否则 留在 键盘 缓冲区里,没到 输入流缓冲区里去。

这就是清楚了,并非 scanf 一定要等 回车,scanf 只是等 输入流缓冲区 有数好取。键盘一次拍入很多数,回一次车,输入流缓冲区就有了很多数,scanf就不需等待回车不回车了。
scanf 读数 以空白为数的分隔符,空格,回车属 空白。 回车 对 scanf 来说,是 数的分隔符。追问scanf读取数据不用等,但是scanf结束一定要回车啊。当我们用一次scanf时候,不管按多少空格,最后都是要以回车来结束scanf 。这样程序才能往下执行。
而这个程序里,凭什么决定scanf运行结束,然后判断进入循环,然后再次调用scanf????没有啊,整个过程只有最后一个回车,这是怎么回事呢?追答scanf结束 本身,不需要回车。不管连续按多少空格,scanf 只当1个空格。

用户一次性输入若干数,回车,然后自动求和。
用 gets() 把整行数据存入 char str[2000];
用 sscanf(str,"....",..); 处理。

如果规定好,最后一个数结束时没有后续空格:例如,1 2 3 4 5 6回车:
int x,sum=0;
char c;
scanf("%d",&sum);
while(1){
c = getchar();
if (c=='\n') break;
if ( scanf("%d",&x) == 1 ) sum+=x; else break;
}
printf("%d",sum);

题目的意思是 输入前并不知道将输入多少数,输入时,只考虑1行,无论多少个数,遇到行结束符,输入就算结束,程序要能分辨出一个一个数,并计算出它们的和。
scanf 本身是不需要回车符作为结束符,并不要每个数结束都要带回车符。所以题目不矛盾。追问scanf结束 本身,不需要回车————但实际操作中,只运行一次scanf 不是要回车结束吗?这又怎么说不需要回车呢?追答scanf 从输入缓冲区取数,不需要回车。
键盘缓冲区的东西,发送到 输入缓冲区,需要回车符触发。
例如:c = getchar(); 时,拍入了 123 456 78回车,getchar(); 只取用了1,其余 23 456 78都留在输入缓冲区,scanf从 23 开始取数,剩余的 456 78 还留在输入缓冲区。
输入缓冲区 和 键盘缓冲区 是不同的区。你要 分清两个区,就明白 回车符的作用。追问原来如此,我有点明白了。就是说,scanf读取输入缓冲区的数据,如果没有数据可读,那么打开输入通道,制定好输入的一些要求,让用户输入,用户输入只是在键盘缓冲区输入,回车后才把数据弄到输入缓冲区。然后scanf读取

如果一开始输入缓冲区已经有数据了,那么scanf就不会打开通道让用户输入,它直接就读取数据,然运行,是这样吗追答对。你总算弄明白了。
全部回答
以输入 ”1 2 回车“ 为例:
1, 按下回车后 scanf 开始读值
2,scanf 每次读一个值 遇到下一个空格时停止,返回值是读取的数值,
此时是 1,2, 符合条件
scanf("%d",&i)== 1
但当读到回车时,返回值是 0 因为读取发生了错误
不符合 scanf("%d",&i)== 1 // 0 == 1 错误!
所以停止循环,即不在读取数字
scanf的返回值是输入值得个数追问我知道,又不是问这个
scanf 空格也可以分割追问分割我知道,但结束不是一定要回车么?如果只执行一次scanf,难道不按回车它能结束?
scanf 语句支持一次输入多个变量,scanf一次最多读入一行的变量。
按回车键是告诉scanf输入结束了。如果你输入一个数后,按回车,那么根据输入的这个数
while循环的条件语句scanf(%d,&i) = =1,会进行判断,满足条件则继续执行循环体中的内容。

若你在一行内输入所有数据,则如果你用空格分开,程序就会等你按下回车告诉系统你输入完了,程序才会判断。追问scanf 语句支持一次输入多个变量?那是设定好了scanf接受多个变量吧,比如scanf(%d%d%d,&i,&j,&k)

这里设定好了,scanf运行一次只接受一个变量,我的意思是,scanf运行一次,必须要靠回车结束,但这里循环明显运行了多次,怎么只用一个回车呢追答在C语言中对数据的存储时一字节为单位的。输入输出的数据流的开始和结束仅受程序控制而不受物理符号(如 回车换行)控制。一批数据输入到内存缓冲区,然后再从缓冲区逐个的将数据送到程序数据区。追问如果这样的话,那么我取消循环,只用一个scanf,只需要输入一个元素,那肯定要回车scanf才结束,流程才会继续执行下去吧?

如果他不受回车控制,那么不输入回车,流程就会自动进行下去,那又怎么解释以上现象呢,这不是矛盾么追答输入回车是告诉程序出入完毕
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
iphone4s的2g网络如何改成4g网络?
顺德太公小食坊怎么去啊,有知道地址的么
MCS低压柜最多能做多少抽屉
送杜少府之任蜀州 是唐代诗人【 】写的.其中
单选题在2010年两会记者会上,温家宝总理答台
请问什么是word表格中的内框??
为什么要实施跨流域调水
李安是不是中国人
被带绿帽子的搞笑句子,形容戴绿帽子的诗句
腰坝砖厂怎么去啊,有知道地址的么
文凭等于水平 那么学历等于能力吗?
为什么说当男人彻底懂一个女人后就不会再去爱
想搞一个水上乐园,咨询下造价多少! 大概有1
自制逆变器用两个D13003A三极管怎样接线两个
用控制样绘制分析质量控制图时,对所用的测定
推荐资讯
重装系统怎样备份有用的文件
首尔朴宝·炭火烤肉NO.01这个地址在什么地方
很久没洗澡,身上发痒抓起红斑,该怎么处理没
地下城与勇士的紫装一套有额外属性加吗?有赏
单选题下列生物中,与乳酸菌具有同样代谢类型
家庭装修档次是如何划分的?
acca f2科目包含哪些内容
驾驶证扣满12分还能年审过期了怎么办
检具材料和加工方式
梦见自己村边盖了很多别墅,3至4层很漂亮
浩方冰封打中文名字的问题
适合甜美声音朗诵的美文诗歌
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?