博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cin 与 getchar 中的坑
阅读量:5094 次
发布时间:2019-06-13

本文共 1532 字,大约阅读时间需要 5 分钟。

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

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

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

 

转载于:https://www.cnblogs.com/aimqqroad-13/p/4349167.html

你可能感兴趣的文章
转化课-计算机基础及上网过程
查看>>
android dialog使用自定义布局 设置窗体大小位置
查看>>
ionic2+ 基础
查看>>
互联网模式下我们更加应该“专注”
查看>>
myeclipse集成jdk、tomcat8、maven、svn
查看>>
查询消除重复行
查看>>
Win 10 文件浏览器无法打开
查看>>
[leetcode]Minimum Path Sum
查看>>
内存管理 浅析 内存管理/内存优化技巧
查看>>
【BZOJ 5222】[Lydsy2017省队十连测]怪题
查看>>
Java跟Javac,package与import
查看>>
Json格式的字符串转换为正常显示的日期格式
查看>>
[转]使用 Razor 进行递归操作
查看>>
[转]Android xxx is not translated in yyy, zzz 的解决方法
查看>>
docker入门
查看>>
Android系统--输入系统(十一)Reader线程_简单处理
查看>>
监督学习模型分类 生成模型vs判别模型 概率模型vs非概率模型 参数模型vs非参数模型...
查看>>
Mobiscroll脚本破解,去除Trial和注册时间限制【转】
查看>>
32位与64位 兼容编程
查看>>
iframe父子页面通信
查看>>