| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1940 人关注过本帖
标题:[求助] 循环语句中getchar和scanf混合使用时的问题
只看楼主 加入收藏
家力掠
Rank: 2
等 级:论坛游民
帖 子:52
专家分:16
注 册:2015-6-28
结帖率:41.18%
收藏
 问题点数:0 回复次数:6 
[求助] 循环语句中getchar和scanf混合使用时的问题
code:
7         while ((ch=getchar())!='\n')
8         {
9                         if(scanf ("%d %d",&rows,&cols)!=2)    break;
10                         display(ch,rows,cols);
11                         while(getchar()!='\n')
12                                 continue;
这是C primer plus8.5 showchar.c的代码
求助下这段程序的执行步骤,7~9行的.
ch=getchar()是一次只读取一个字符然后进入循环,但循环中的scanf是要读取两个数字.
1.如果每次只读取一个数字然后进入循环的话,那么第9行程序不是就出现错误了吗?
2.如果是读入缓冲区然后再进入循环的话,那么scanf是执行然后任意寻找两个数字?(这个结论好像是错误的..)
求问下当getchar()和scanf照这样的代码计算机是如何执行的?
搜索更多相关主题的帖子: continue display 
2015-06-28 22:48
hjx1120
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:李掌柜
等 级:贵宾
威 望:41
帖 子:1314
专家分:6927
注 册:2008-1-3
收藏
得分:0 

你可以把scanf()看成混合输入模式
      把getchar()看成单一输入模式
2015-06-28 23:14
家力掠
Rank: 2
等 级:论坛游民
帖 子:52
专家分:16
注 册:2015-6-28
收藏
得分:0 
以下是引用hjx1120在2015-6-28 23:14:59的发言:


你可以把scanf()看成混合输入模式
      把getchar()看成单一输入模式
那么这个程序是将输入加载入缓冲区然后执行吗?
例如我输入1 a 2然后报错是因为scanf("%d %d",&balabala1,&balabala2)必须要是连续的吗?
scanf获取的两个数字是从我们输入的地方获取还是从缓冲区获取呢?
2015-06-28 23:42
hjx1120
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:李掌柜
等 级:贵宾
威 望:41
帖 子:1314
专家分:6927
注 册:2008-1-3
收藏
得分:0 
多个输入scanf()函数时会自动过滤掉缓冲区
while(getchar() != '\n')
    continue;
这两句代码是为了过滤掉
 while ((ch=getchar())!='\n')
这句代码产生的缓冲区问题
2015-06-29 00:03
家力掠
Rank: 2
等 级:论坛游民
帖 子:52
专家分:16
注 册:2015-6-28
收藏
得分:0 
以下是引用hjx1120在2015-6-29 00:03:17的发言:

多个输入scanf()函数时会自动过滤掉缓冲区
while(getchar() != '\n')
    continue;
这两句代码是为了过滤掉
 while ((ch=getchar())!='\n')
这句代码产生的缓冲区问题
什么叫做自动过滤掉缓冲区?
 while ((ch=getchar())!='\n')
应该没有产生问题吧?因为这个是例程所以拿出来问下.
程序代码:
  7         while ((ch=getchar())!='\n')
  8         {
  9                         scanf ("%d %d",&rows,&cols)!=2;

 10                         display(ch,rows,cols);

 11                         while(getchar()!='\n')

 12                                 continue;

 13                         printf ("enter another character and two integers");

 14                         printf ("(enter a new line to quit):");

 15


 16         }
这边是while函数里面的代码(感觉越问越乱TT..)
2015-06-29 00:11
lmlm1001
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:4
帖 子:107
专家分:550
注 册:2015-3-1
收藏
得分:0 
getchar()读取stdin的单个字符, scanf()根据控制字符串读取stdin,并返回成功的读取项的数量。
假如输入 1 a 2 的话,1应该被读入ch,值为49, 而scanf()读取的就是 a 2了,返回值不等于2,所以跳出循环
2015-06-29 00:12
家力掠
Rank: 2
等 级:论坛游民
帖 子:52
专家分:16
注 册:2015-6-28
收藏
得分:0 
回复 6楼 lmlm1001
明白了.谢谢.
2015-06-29 00:22
快速回复:[求助] 循环语句中getchar和scanf混合使用时的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.050127 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved