c语言多组输入字符,关于c语言中 scanf 对多行字符的输入问题
如果想直接看解决办法,直接点击目录中的结果处
文章目录
前言:
问题:
原因:
尝试改进:
新问题:
原因:
最后解决办法:
思路:
结果
前言:
我想大家在做一些PTA题的时候,有的时候需要输入多行字符,例如:
AB
C D
WQ
在这些多行输入中如果使用scanf的%c来格式输入时:
int main()
{
char ch1, ch2;
for (int i = 0;i < 3;i++) {
scanf("%c %c", &ch1, &ch2);
//char a = getchar();
printf("ch1=%c\n", ch1);
printf("ch2=%c\n", ch2);
}
}
问题:
可以看到如果scanf("%c %c", &ch1, &ch2); 输入时有的字符为空
原因:
因为在cmd中每行我们输入完了该输入下一行时会使用回车
然后鸡贼的scanf也把回车当成了一个字符给了我们的变量
尝试改进:
那咋办么,我想输入多行字符,那scanf又要截取我的回车。。。(那我就让他截取)没错,这个时候你一定想到了在每次输入时在scanf中加入\n比如:
scanf("%c %c\n",&a, &b);
新问题:
然后你会发现特扯的事情:当你输入第一行时,你发现此时应该输出的值没有输出,
你输入第二行的时候,输出的值是第一行的值,最恶心心的来了:当你输入完三行后按回车发现程序不会退出(图中蓝色部分是我狂按回车)但是随便输入一个值后再按回车我们才能看到第三行的输出与程序的退出
(没错,此时的你一定更我一样百思不得其解,差点当场自闭)
原因:
我查了好多博客等相关资料,得到的解释是:
先理解scanf的输入:
我们输入的数据是先存放在“缓冲区”,可以把它理解为一个队列。输入数据从队列的右端进入,而scanf读取数据是从队列的左端取出。注意:与格式控制符不匹配的数据还停留在缓冲区中。
接下来看什么程序只有在输入一个无效的字符,回车后才能退出
当我键盘录入 ‘ %c %c\n ’的时候,输入的前两个字符会被读取到并且赋值给变量,后面的回车会被scanf拿去 (看看这不就是我们要做的吗 )
但是问题就在于:此时缓冲区里是一片空白,然而程序结束需要读到缓冲区里任意一个回车才可以结束。
但是我不是输入了很多空格么? 这个是scanf读取有效字符的问题:比如,scanf要读取到有效的整型,会跳过开头的一切回车和空白,直到遇到整型才会纳入赋值给相应变量,然后再遇到回车才会结束这条语句。所以接着刚问题,缓冲区中是空白的时候,就是给一万个\n ,scanf语句会把它视为开头的空白,是不会读取的,所以要加入一点东西,跳过这个开头的空白,再给回车才有效果。所以它才会一直等待你输入一点东西。
最后解决办法:
听完我在上上面的解释后,你发现你还是不知道如何解决这种让你吐血的问题(嘿嘿):
思路:
思路与原来相同就是想办法把没用的回车给吸收了:
使用getchar()就可以了(因为吸收了回车,所以没有必要在scanf中写\n)
int main()
{
char ch1, ch2;
for (int i = 0;i < 3;i++) {
scanf("%c %c", &ch1, &ch2);
char a = getchar();//为了吸收多余的回车字符
printf("ch1=%c\n", ch1);
printf("ch2=%c\n", ch2);
}
}
结果
c语言多组输入字符,关于c语言中 scanf 对多行字符的输入问题相关推荐
- 关于c语言中 scanf 对多行字符的输入问题
如果想直接看解决办法,直接点击目录中的结果处 文章目录 前言: 问题: 原因: 尝试改进: 新问题: 原因: 最后解决办法: 思路: 结果 前言: 我想大家在做一些PTA题的时候,有的时候需要输入多行 ...
- c语言中gets函数可以输入空格吗_C语言中scanf()与gets()函数的区别,哪一个可以读入空格啊?...
展开全部 1.scanf不能接受空格.制表符Tab.回车等:对末尾回车符的处理:把回32313133353236313431303231363533e59b9ee7ad9431333431356634 ...
- scanf在c语言中的作用,c语言中scanf的基本用法
前言 scanf()是C语言的格式输入函数,和printf函数一样被声明在stdio.h头文件中,它的基本使用很简单: 1 int a; 2 scanf("%d",&a); ...
- C语言-在scanf表示什么,在c语言中scanf代表什么意思?
在c语言中scanf代表什么意思? 发布时间:2020-04-24 14:04:21 来源:亿速云 阅读:370 作者:小新 今天小编给大家分享的是在c语言中scanf代表什么意思,相信很多人都不太了 ...
- c语言scanf中 作用,c语言中scanf的用法
c语言中scanf的用法的用法你知道吗?下面小编就跟你们详细介绍下c语言中scanf的用法的用法,希望对你们有用. c语言中scanf的用法的用法如下: printf和scan函数的使用方法 一 pr ...
- java字符型常量可以改变_在JAVA语言中,下列正确的字符型常量是
在JAVA语言中,下列正确的字符型常量是 答:'9' 智慧职教: 引发COVID-19疾病的新冠病毒的核酸类型是(? ? ? ). 答:RNA 仍然是长期制约我国经济社会发展的关键性问题之一 答:人口 ...
- c语言求字符ascii,C语言中ASCII码是什么意思? c语言怎么求字符的ascii码
导航:网站首页 > C语言中ASCII码是什么意思? c语言怎么求字符的ascii码 C语言中ASCII码是什么意思? c语言怎么求字符的ascii码 相关问题: 匿名网友: 是一个字符表,一个 ...
- c语言限制字符数,C语言中“不受限制”的字符串函数总结.pdf
C语语言言中中"不不受受限限制制"的的字字符符串串函函数数总总结结 "不不受受限限制制的的"字字符符串串函函数数 按 <C和指针>中所说,那些常用的 ...
- c语言中字符串输入格式错误的是什么,C语言中scanf函数格式化错误输入问题
好久都么写文章了,一直忙着做课程设计,感觉有些懒了.今天实验室一个同学问到了这样一个问题. 函数名: scanf功 能: 执行格式化输入 用 法: int scanf(char *format[,ar ...
最新文章
- python 中__name__ = '__main__' 的作用
- JS中的事件冒泡——总结
- 为什么这么多烂代码?
- bash获得相对路径的文件信息
- Nginx之gzip压缩配置
- 【 Logistic Regression 】林轩田机器学习基石
- java中process方法用处_Java Process 简略使用方法以及坑点
- 软件工程综合实践第二次作业——结对编程
- 在线购物网站-实验4
- 筑业单机版建材管理软件
- 金融资产管理公司 不良资产的发言人
- 最全的【英语词根词缀思维导图总结】
- windows安装mmdetection
- 提示计算机中丢失 opencv_world300d.dll
- Android招聘心得分享
- JAVA Swing + Jdbc 实现宿舍管理系统
- 机器学习(四):剪枝技术(基础篇)
- nagios mysql 并发_nagios监控mysql的connections和processlist
- android5.0+电视,当Android 5.0搭载在电视上,是一种怎样的体验?
- 影响IT人员未来发展的五个IT新技术方向
热门文章
- (转)iOS7界面设计规范(10) - UI基础 - 文字排版与配色
- ActiveReports 报表应用教程 (2)---清单类报表
- control.add()
- Enterprise Library 5.0发布
- 图的顺序存储结构及C语言实现
- Hibernate two table same id
- Mysql大表的优化
- 怎样解决WampServer #1405 - Access denied for user #39;root#39;@#39;localhost#39; (using password: NO...
- 通过Samba实现Win/Mac访问Linux
- 程序人生系列之新闻发布系统 在网站部署经验分享