求指教,C++第三讲中的一个程序
小甲鱼老师在C++第三讲中讲了这个程序的实现,想了两天没想通,请大家指教下,谢谢源代码如下:
#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()) == ' ' )// 屏蔽空格
;
也没懂。
请帮我看一下,谢谢(*^__^*)
scanf("%d", &i)返回1说明成功分配领域,数与数之间用空格隔开, while( (ch=getchar()) == ' ' )
用来判断是一个数还是两个数。。。。
举个例子吧
输入: 123 456
首先scanf将 i = 123,那么这时 sum = 123, 用 while( (ch=getchar()) == ' ' )判断后面的空格数,如果是空格就一直循环,当读到 ch = '4' 时就跳出循环,在判断是否回车了,如果不是,就把刚才读到的'4 '还回到缓冲区
scnaf再将 i = 456,后面同理。。。。。 学习哈。。 {:10_254:}
页:
[1]