• cin 与 getchar 中的坑


    今天在一道题上发现一个坑。

    输入三个字符,按以下规则求其平均值。

    (1)如果是数字0~9,那么直接参与求值;

    (2)如果是其他字符,则其ASCII码参与求值。

    输入

    输入数据有多组。第一行是数据的组数T,接下来由T行,每行有3个字符,没有其他任何多余字符。

    输出

    对于每组输入,根据规则输出平均值。保留2位小数。

    样例输入

    2 123 1A3

    样例输出

    2.00 23.00
    这是我栽了几次坑之后,还是错的代码:
    #include<iostream>
    #include<cstdio>
    using namespace std;
    int main()
    {
     char str[3];
     int i,t;
     double sum;
     cin>>t;
     getchar();
     while(t--)
     {
      cin>>str[0];
      cin>>str[1];
      cin>>str[2];
      getchar();
      sum=0;
      for(i=0;i<3;i++)
      {
       if(str[i]-'0'>=0&&str[i]-'0'<=9)
        sum+=str[i]-'0';
       else sum+=(int)str[i];
      }
      printf("%0.2lf ",sum/3.0);
     }
     return 0;
    }
     
    发现有什么问题吗?
     
    在看一看正确的代码:
    #include<iostream>
    #include<cstdio>
    using namespace std;
    int main()
    {
     char str[3];
     int i,t;
     double sum;
     cin>>t;
     getchar();
     while(t--)
     {
      str[0]=getchar();
      str[1]=getchar();
      str[2]=getchar();
      getchar();
      sum=0;
      for(i=0;i<3;i++)
      {
       if(str[i]-'0'>=0&&str[i]-'0'<=9)
        sum+=str[i]-'0';
       else sum+=(int)str[i];
      }
      printf("%0.2lf ",sum/3.0);
     }
     return 0;
    }
    发现问题了没?
    两组测试数据即可发现问题:1 3(中间为空格) 和123
    下面就这个问题说一说:

    ①cin>>:无法接收空格、Tap键且以空格、Tap键、回车符为分隔符

    ②cin.get( ):可以接收空格、Tap键且以回车符为结束符;

    一:可输入单个字符

    格式:

    char ch;

    ch=cin.get( );/cin.get(ch);

    二:可输入字符串

    格式:

    cin.get(字符数组名,元素个数)

    ③getline( ):可接收空格、Tap键且以回车符为结束符;

    格式:

    string str;//字符串变量

    getline(cin,str);

    ④cin.getline( ):可接收空格、Tapa键且以回车符结束;

    格式:cin.getline(字符数组名,元素个数)

    char m[20];

    cin.getline(m,20);

    ③和④类似,单数getline( )属于string流类,而cin.getline( )属于istream流类,是不一样的函数。

    C语言中的gets( )和getchar( )

    ①gets(字符数组名)用于接收字符串,可包括空格、Tap键且以回车符结束;

    ②getchar(字符变量名)用于接收单个字符且以回车符结束,一般需要两个。前一个接收字符,后一个接收回车符。

    ③putchar(字符变量名或整常数)

  • 相关阅读:
    java 单例设计模式
    JAVAWEB监听器(二)
    pxe无人值守安装linux机器笔记----摘抄
    Ganglia3.1.7安装与配置(收录)
    Hadoop Sentry 学习
    安装和配置Sentry(收录)
    sqoop 的使用 -20160410
    深度分析如何在Hadoop中控制Map的数量(摘抄)
    CDH,CM下载
    大数据培训班 cloudera公司讲师面对面授课 CCDH CCAH CCP
  • 原文地址:https://www.cnblogs.com/aimqqroad-13/p/4349167.html
Copyright © 2020-2023  润新知