鱼C论坛

 找回密码
 立即注册
查看: 2438|回复: 3

求指教,C++第三讲中的一个程序

[复制链接]
发表于 2012-5-4 19:55:23 | 显示全部楼层 |阅读模式
5鱼币
小甲鱼老师在C++第三讲中讲了这个程序的实现,想了两天没想通,请大家指教下,谢谢
未命名.jpg
源代码如下:

#include <stdio.h>
#include <stdlib.h>

void main()
{
      int i;
      int sum = 0;
      char ch;

      printf("请输入一串整数和任意数目的空格: ");

      while( scanf("%d", &i) == 1 )
      {
            sum += i;

            while( (ch=getchar()) == ' ' )  // 屏蔽空格
                  ;

            if( ch == '\n' )
            {
                  break;
            }

            ungetc( ch, stdin );  // 将变量ch 中存放的字符退回给stdin输入流。
      }
      
      printf("结果是: %d", sum);
      printf("\n");
      system("pause");
}


代码中:  
            while( scanf("%d", &i) == 1 )和
            while( (ch=getchar()) == ' ' )  // 屏蔽空格
                  ;
这两处没有懂, while( scanf("%d", &i) == 1 )的循环条件是 scanf的返回值是1,scanf函数中输入数据的类型为整型,那在程序运行的时候,能输入空格吗?多个整数用这条语句,一次就输入完成了,感觉有些不可思议,呵呵。
while( (ch=getchar()) == ' ' )  // 屏蔽空格
                  ;
也没懂。

请帮我看一下,谢谢(*^__^*)

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-5-4 22:02:08 | 显示全部楼层
scanf("%d", &i)返回1说明成功分配领域,数与数之间用空格隔开, while( (ch=getchar()) == ' ' )
用来判断是一个数还是两个数。。。。
举个例子吧
输入:            123                456
首先scanf将 i = 123,那么这时 sum = 123, 用 while( (ch=getchar()) == ' ' )判断后面的空格数,如果是空格就一直循环,当读到 ch = '4' 时就跳出循环,在判断是否回车了,如果不是,就把刚才读到的'  4 '还回到缓冲区
scnaf再将 i = 456,后面同理。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-5-9 11:33:02 | 显示全部楼层
学习哈。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-24 15:15:40 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-10 01:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表