每次scanf不是要以回车结束的么?为何这么多scanf只用一次回车??
C语言中,要求用户一次性输入若干数,回车,然后自动求和。这个问题,用while循环条件是scanf(%d,&i)==1然后循环内容是求和sum=sum+i之后再用个get...
C语言中,要求用户一次性输入若干数,回车,然后自动求和。
这个问题,用while循环条件是scanf(%d,&i) = =1 然后循环内容是求和sum = sum +i 之后再用个getchar等。
我就不明白,scanf是需要回车结束的,每一次运行scanf都必须碰到回车才能结束。那么这个循环弄了这么多次scanf,而用户却只需要一个回车就能解决,这是为什么?这不是矛盾么 展开
这个问题,用while循环条件是scanf(%d,&i) = =1 然后循环内容是求和sum = sum +i 之后再用个getchar等。
我就不明白,scanf是需要回车结束的,每一次运行scanf都必须碰到回车才能结束。那么这个循环弄了这么多次scanf,而用户却只需要一个回车就能解决,这是为什么?这不是矛盾么 展开
5个回答
展开全部
scanf 从输入流缓冲区里 读取数值,如果输入缓冲区内已有数值,它就可以取用,如果缓冲区里 没有数值,或数的个数不足,scanf 就要等待。 这是第一点。
第2点,那么 缓冲区里 的数 从何而来?答:是从键盘 缓冲区里来。
键盘 缓冲区 的数据 只有当 遇到 回车键 时 才 送到 输入流缓冲区,否则 留在 键盘 缓冲区里,没到 输入流缓冲区里去。
这就是清楚了,并非 scanf 一定要等 回车,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 本身是不需要回车符作为结束符,并不要每个数结束都要带回车符。所以题目不矛盾。
2013-05-24
展开全部
scanf 语句支持一次输入多个变量,scanf一次最多读入一行的变量。
按回车键是告诉scanf输入结束了。如果你输入一个数后,按回车,那么根据输入的这个数
while循环的条件语句scanf(%d,&i) = =1,会进行判断,满足条件则继续执行循环体中的内容。
若你在一行内输入所有数据,则如果你用空格分开,程序就会等你按下回车告诉系统你输入完了,程序才会判断。
按回车键是告诉scanf输入结束了。如果你输入一个数后,按回车,那么根据输入的这个数
while循环的条件语句scanf(%d,&i) = =1,会进行判断,满足条件则继续执行循环体中的内容。
若你在一行内输入所有数据,则如果你用空格分开,程序就会等你按下回车告诉系统你输入完了,程序才会判断。
更多追问追答
追问
scanf 语句支持一次输入多个变量?那是设定好了scanf接受多个变量吧,比如scanf(%d%d%d,&i,&j,&k)
这里设定好了,scanf运行一次只接受一个变量,我的意思是,scanf运行一次,必须要靠回车结束,但这里循环明显运行了多次,怎么只用一个回车呢
追答
在C语言中对数据的存储时一字节为单位的。输入输出的数据流的开始和结束仅受程序控制而不受物理符号(如 回车换行)控制。一批数据输入到内存缓冲区,然后再从缓冲区逐个的将数据送到程序数据区。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
scanf的返回值是输入值得个数
追问
我知道,又不是问这个
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
scanf 空格也可以分割
追问
分割我知道,但结束不是一定要回车么?如果只执行一次scanf,难道不按回车它能结束?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
以输入 ”1 2 回车“ 为例:
1, 按下回车后 scanf 开始读值
2,scanf 每次读一个值 遇到下一个空格时停止,返回值是读取的数值,
此时是 1,2, 符合条件
scanf("%d",&i)== 1
但当读到回车时,返回值是 0 因为读取发生了错误
不符合 scanf("%d",&i)== 1 // 0 == 1 错误!
所以停止循环,即不在读取数字
1, 按下回车后 scanf 开始读值
2,scanf 每次读一个值 遇到下一个空格时停止,返回值是读取的数值,
此时是 1,2, 符合条件
scanf("%d",&i)== 1
但当读到回车时,返回值是 0 因为读取发生了错误
不符合 scanf("%d",&i)== 1 // 0 == 1 错误!
所以停止循环,即不在读取数字
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询