zoukankan      html  css  js  c++  java
  • 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             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("
    各数字出现次数:");
    44     for(n=0;n<10;n++)
    45     {
    46         printf("
    %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次
  • 相关阅读:
    Mybatis源码中最重要的几个类
    学习爬虫-运营商积分
    IntelliJ IDEA 最新版 2019.2.4 激活 (持续更新)(含windows和Mac)
    归并排序之求小和
    归并排序
    理解递归
    插入排序
    对数器
    冒泡排序
    mysql 数据库名称,中间带有中划线问题
  • 原文地址:https://www.cnblogs.com/alpharobert/p/5352322.html
Copyright © 2011-2022 走看看