C语言笔记-getchar等蛋疼设定 [可能已解决]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言笔记-getchar等蛋疼设定 [可能已解决]相关的知识,希望对你有一定的参考价值。

疑问先, getchar()只能接受一个字符, putchar()只能输出一个字符, 为啥下面这个例子可以输出好多个字符呢...

 1 #include <stdio.h>
 2 int main()
 3 {
 4     int ch;
 5     while((ch=getchar())!=EOF)
 6     {
 7         putchar(ch);
 8     }
 9     return 0;
10 }

结果:

this is a long long sentence.... //这句是我输入的
this is a long long sentence.... //这句就是输出的

后来读了其他解释的文章, 我特么好像明白了! 

没准是我输入的整段句子都进了缓冲区, getchar()一次一个字符的存,putchar()一次一个字符的输出, 然后只要读取的不是EOF, 就一直输出, 那是不是我写一篇文章都能给我输出来!?

结果:

1 你看我在写一篇文章哦!看看它是不是都能给我输出出来!!!//这句是我输入的
2 你看我在写一篇文章哦!看看它是不是都能给我输出出来!!!//这句是它输出的

后来例子作者给出了等效的代码:

1 上述代码等同于:
2 while(1) //无限循环下去,只要不是EOF
3 {
4     ch=getchar();
5     if(ch==EOF)
6     {
7         break;
8     }
9     putchar();

看来应该是这样了吧...

于是可以拿来进行这个例子(计算输入流中出现的数字字符数.)

 1 //计算输入流中出现的各数字字符数
 2 #include <stdio.h>
 3 int main()
 4 {
 5     int n,number;
 6     int a[10]={0};//设立一个数组,代表0~9这10个不同的数字,赋值0.
 7     while((number=getchar())!=EOF)
 8     {
 9         switch(number)
10         {
11             case0://注意是case ‘0‘,不是case(0)
12                 a[0]++;
13                 break;
14             case1:
15                 a[1]++;
16                 break;
17             case2:
18                 a[2]++;
19                 break;
20             case3:
21                 a[3]++;
22                 break;
23             case4:
24                 a[4]++;
25                 break;
26             case5:
27                 a[5]++;
28                 break;
29             case6:
30                 a[6]++;
31                 break;
32             case7:
33                 a[7]++;
34                 break;
35             case8:
36                 a[8]++;
37                 break;
38             case9:
39                 a[9]++;
40                 break;
41         }
42     }
43     printf("\n各数字出现次数:");
44     for(n=0;n<10;n++)
45     {
46         printf("\n%d:%d次",n,a[n]);
47     }
48     return 0;
49 }

结果:

5.3495346956991216495502//这个是我输入的,回车
^Z//按ctrl+z.回车

各数字出现次数:
0:1次
1:2次
2:2次
3:2次
4:3次
5:5次
6:3次
7:0次
8:0次
9:5次

 

以上是关于C语言笔记-getchar等蛋疼设定 [可能已解决]的主要内容,如果未能解决你的问题,请参考以下文章

C语言知识点总结笔记吃透getchar()函数,超详细解析!!!

c语言中(c=getchar())!=EOF与c=getchar()!=EOF的区别?

Emgu.CV.CvInvoke的类型初始值设定项引发异常

如何用getchar函数将数据存如数组?(C语言)

基于C语言EOF与getchar()的使用详解

C primer plus笔记