免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1720 | 回复: 5
打印 上一主题 下一主题

getchar的疑惑 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-02 23:12 |只看该作者 |倒序浏览
近日做练习时遇到这么个习题,要求打印到n为止的自然数和其平方值,并在每24个之后暂停,显示"Press Enter to continue...", 按下enter后继续。小弟想了几次都写错了,这个时作者给出的答案:

int main(void)
{
  int i, n;
  char ch;

  printf("This program prints a table of squares.\n");
  printf("Enter number of entries in table: ");
  scanf("%d", &n);
  ch = getchar();
    /* dispose of new-line character following number of entries */
    /* could simply be getchar(); */


for (i = 1; i <= n; i++) {
    printf("%10d%10d\n", i, i * i);
    if (i % 24 == 0) {
      printf("Press Enter to continue...");
      ch = getchar();   /* or simply getchar(); */
    }
  }

  return 0;
}

对这一段很是困惑
scanf("%d", &n);
  ch = getchar();
    /* dispose of new-line character following number of entries */
    /* could simply be getchar(); */

为何在刚输入n后就用getchar?这个getchar不是读入了输入n之后的回车,但没有保存么?这行getchar和后面的暂停有什么关系呢?
试过去掉这一行,程序无法停下。

请大家帮忙解惑。

论坛徽章:
1
天蝎座
日期:2013-08-25 10:27:22
2 [报告]
发表于 2009-03-03 09:29 |只看该作者
你在输入n的值之后,回车了。
getchar()接收这个回车产生的字符的。。
如果这里不写,字符就会传到后边那个getchar()。

从而后边那个getchar()已经有字符了,。
就不用再停下来等你输入了。

评分

参与人数 1可用积分 +2 收起 理由
samon_fu + 2 不错。

查看全部评分

论坛徽章:
0
3 [报告]
发表于 2009-03-03 09:55 |只看该作者
输入72以后的就可以停了
你输 XX<回车> n只拿走他需要的长度,缓冲区中还剩下一个字符 '\x0A'
你去掉了,碰到第一个%24时他拿走了缓冲区里的.所以48以内的不会停

论坛徽章:
0
4 [报告]
发表于 2009-03-03 13:20 |只看该作者
不要用scanf,用gets+sscanf。

论坛徽章:
0
5 [报告]
发表于 2009-03-03 17:52 |只看该作者
多谢多谢~~~ 哈哈,终于懂了!!各位真是帮了我很多,自从学C以来有的问题都得到大家的帮助,十分感谢大家,也感谢有这样一个学习的好地方!

论坛徽章:
0
6 [报告]
发表于 2009-03-03 17:58 |只看该作者
原帖由 JohnBull 于 2009-3-3 13:20 发表
不要用scanf,用gets+sscanf。


多谢大大的建议,只是目前此书的进度还没有到这里。我想此题的目的或许是为了让我更加理解前面讲过的scanf后跟getchar可能产生的陷阱吧。
等学到了的时候我会再按大大的建议再做一次,学习C真是太有趣了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP