一段C程序分析

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 void main()
 5 {
 6     int i;
 7     int sum = 0;
 8     char ch;
 9 
10     printf("请输入一串整数和任意数目的空格: ");
11 
12     while( scanf("%d", &i) == 1 )
13     {
14         sum += i;
15 
16         while( (ch=getchar()) == ' ' )
17             ;
18         if( ch == '\n' ) 
19         {
20             break;
21         }
22 
23         ungetc( ch, stdin );
24     }
25 
26     printf("结果是: %d", sum);
27     printf("\n");
28     system("pause");
29 }

分析:该程序让用户在终端输入一连串的数字和空格,以换行符结束输入,并计算数字之和。

scanf("%d",&i)会忽略开头的一系列空格取到第一个数字,随后的空格会被getchar()接收并吸收掉。当ch = getchar()再次遇到数字时,需要将ch中的数值返回到stdin流中(例如11  22,getchar()将在一系列空格后吸收到2,此时需要将2返回到输入流中)。当getchar()遇到的字符为回车符时,将结束输入。

posted on 2014-03-16 16:31  stackhacks  阅读(172)  评论(0编辑  收藏  举报

导航