疑问先, 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 case‘0‘://注意是case ‘0‘,不是case(0) 12 a[0]++; 13 break; 14 case‘1‘: 15 a[1]++; 16 break; 17 case‘2‘: 18 a[2]++; 19 break; 20 case‘3‘: 21 a[3]++; 22 break; 23 case‘4‘: 24 a[4]++; 25 break; 26 case‘5‘: 27 a[5]++; 28 break; 29 case‘6‘: 30 a[6]++; 31 break; 32 case‘7‘: 33 a[7]++; 34 break; 35 case‘8‘: 36 a[8]++; 37 break; 38 case‘9‘: 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次
时间: 2024-11-02 14:18:03