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

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

(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\n",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\n",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(字符变量名或整常数)

cin 与 getchar 中的坑的更多相关文章

  1. 缓冲区 cin() getline() getchar()

    ; } 只输入了一行abc, 然后回车后就输出一行abc, 一行空 这是因为cin在缓冲区里丢下的\n 给后面的getline()当成输入结束的标志了 二.getline(cin, str) 输入结束 ...

  2. cin.getline()的用法和坑

    cin.getline()的用法和坑 cin.getline大致原型:**istream& getline (char* s, streamsize n, char delim='\n');* ...

  3. Golang中的坑二

    Golang中的坑二 for ...range 最近两周用Golang做项目,编写web服务,两周时间写了大概五千行代码(业务代码加单元测试用例代码).用Go的感觉很爽,编码效率高,运行效率也不错,用 ...

  4. Golang 中的坑 一

    Golang 中的坑 短变量声明  Short variable declarations 考虑如下代码: package main import ( "errors" " ...

  5. Mysql系列八:Mycat和Sharding-jdbc的区别、Mycat分片join、Mycat分页中的坑、Mycat注解、Catlet使用

    一.Mycat和Sharding-jdbc的区别 1)mycat是一个中间件的第三方应用,sharding-jdbc是一个jar包 2)使用mycat时不需要改代码,而使用sharding-jdbc时 ...

  6. Windows API中的坑

    本文主页链接:Windows API中的坑 ExpandEnvironmentStrings 风险: 进程会继承其父进程的环境变量.在展开如%APPDATA%等文件夹时,有可能父进程对此环境变量进行过 ...

  7. vue中的坑 --- 锚点与查询字符串

    在vue中,由于是单页面SPA,所以需要使用锚点来定位,在vue的官方文档中提到过也可以不使用锚点的情况,就是在vue-router中使用history模式,这样,在url中就不会出现丑陋的#了,但是 ...

  8. Torch-RNN运行过程中的坑 [2](Lua的string sub函数,读取中文失败,乱码?)

    0.踩坑背景 仍然是torch-rnn/LanguageModel.lua文件中的一些问题,仍然是这个狗血的LM:encode_string函数: function LM:encode_string( ...

  9. Torch-RNN运行过程中的坑 [1](读取Lua非空table,size为0)

    0.踩坑背景 执行Torch-RNN的时候,在LanguageModel.lua中的encode_string函数中,对start_text的各个character进行id映射编码,实现功能类似“北京 ...

随机推荐

  1. PyTorch 常用方法总结1:生成随机数Tensor的方法汇总(标准分布、正态分布……)

    在使用PyTorch做实验时经常会用到生成随机数Tensor的方法,比如: torch.rand() torch.randn() torch.normal() torch.linespace() 在很 ...

  2. await

    单个的task await task 多个await asyncio.wait(tasks)

  3. P3243 [HNOI2015]菜肴制作(拓扑排序)

    P3243 [HNOI2015]菜肴制作 题目误导你正着做拓扑排序,然鹅你可以手造数据推翻它.于是就只能倒着做 我们开个优先队列,每次把可填的最大的编号取出来搞,最后倒着输出拓扑序就好辣 #inclu ...

  4. oracle安全应用角色例子

    今天在做看OCP的时候有道题是关于应用安全角色的,不是很明白,在网上找了个例子按照步骤验证了下.QUESTION 48You want to create a role to meet these r ...

  5. kali linux 2.0配置更新源后apt-get update 报错

    这个是我/etc/apt/sources.list的更新源: deb http://http.kali.org/kali kali-rolling main contrib non-free deb ...

  6. (4opencv)OpenCV PR 成功的收获和感悟

     2018-09-12,第一次对OpenCV PR成功 https://github.com/opencv/opencv/pull/12206 <find innercircle of cont ...

  7. Xcode project 设置相关

    FauxPas 这是一款Mac平台的用于检查Xcode项目的辅助工具 ,可以帮助我们找出常见的错误.隐藏的bug.不良实践以及可维护性问题和风格问题. 一, $(SRCROOT)  :当前工程所在的目 ...

  8. 【做题】CF285E. Positions in Permutations——dp+容斥

    题意:求所有长度为\(n\)的排列\(p\)中,有多少个满足:对于所有\(i \,(1 \leq i \leq n)\),其中恰好有\(k\)个满足\(|p_i - i| = 1\).答案对\(10^ ...

  9. 【无法使用yum安装软件】使用yum命令安装软件提示No package numactl.x86_64 available.

    在安装mysql时需要安装numactl.x86_64 使用yum -y install numactl.x86_64时报错 [root@sdp6 mysql]# yum -y install num ...

  10. LuoguP2161 [SHOI2009]会场预约

    题目地址 题目链接 题解 用fhqtreap对区间进行维护. 可以注意到的是,对于当前存在的预约,他们一定是升序排列的(有重叠的都被删了). 那么就可以用按照位置分裂的fhqtreap搞了(预约无论按 ...