【C语言】连续使用多个scanf函数时输入数据

一. 遇到的情况

在多次使用scanf函数时常常会出现下面的情况:

1.

运行下列代码:

#include<stdio.h>
int main()
{
     int a,b,c,x,y,z; 	
     scanf("%d,%d,%d",&a,&b,&c);
     scanf("%c%c%c",&x,&y,&z);
     printf("%d,%d,%d\n",a,b,c);
     printf("x=%c,y=%c,z=%c\n",x,y,z);
     return 0;
}

(1)有关回车(Enter)

从键盘中输入:

11,12,13

按回车(Enter)后输入:

ABC

按回车(Enter)后运行结果为:
在这里插入图片描述

(2)有关空格

从键盘中输入(含空格):

11,12,13 ABC

按回车(Enter)后运行结果为:
在这里插入图片描述

2.

运行下列代码:

#include<stdio.h>
int main()
{
     int a,b,c,x,y,z; 	
     scanf("%d,%d,%d",&a,&b,&c);
     scanf("x=%d,y=%d,z=%d",&x,&y,&z);
     printf("%d,%d,%d\n",a,b,c);
     printf("x=%d,y=%d,z=%d\n",x,y,z);
     return 0;
}

(1)有关回车(Enter)

从键盘中输入:

11,12,13

按回车(Enter)后运行结果为:
在这里插入图片描述

(2)有关空格

从键盘中输入(含空格):

11,12,13 x=14,y=15,z=16

按回车(Enter)后运行结果为:
在这里插入图片描述

很明显上面几种情况的运行结果与预期结果不符

二.原因

(1)有关回车

当用户在输入数据时按下回车键,scanf函数会将回车符作为输入字符之一,并将其吸收到缓冲区中。如果后续的scanf函数读取字符时遇到了回车符,它会将其作为输入字符之一,而不是将其作为输入结束语

(2)有关空格

在后续的scanf函数需要读取字符时,scanf函数会把空格作为输入字符之一。

三.解决办法(以第一种情况为例)

1.加空格

可以抵消输入的回车或满足scanf函数使用要求

 int main()
{
     int a,b,c,x,y,z; 	
     scanf("%d,%d,%d",&a,&b,&c);
     scanf(" %c%c%c",&x,&y,&z);
     printf("%d,%d,%d\n",a,b,c);
     printf("x=%c,y=%c,z=%c\n",x,y,z);
     return 0;
}

运行结果:
在这里插入图片描述
在这里插入图片描述

2.数字后紧接字母

数字后紧接字母,不要空格也不要回车。因为数字和字母是能够被区分开来的

int main()
{
    int a,b,c,x,y,z; 	
    scanf("%d,%d,%d",&a,&b,&c);
    scanf("%c%c%c",&x,&y,&z);
    printf("%d,%d,%d\n",a,b,c);
    printf("x=%c,y=%c,z=%c\n",x,y,z);
    return 0;
}

从键盘中输入:

11,12,13ABC

运行结果:
在这里插入图片描述

3.将需读取字母的scanf函数放到最前面

#include<stdio.h>
int main()
{
     int a,b,c,x,y,z; 	
     scanf("%c%c%c",&x,&y,&z);
     scanf("%d,%d,%d",&a,&b,&c);
     printf("%d,%d,%d\n",a,b,c);
     printf("x=%c,y=%c,z=%c\n",x,y,z);
     return 0;
}

运行结果:
在这里插入图片描述
在这里插入图片描述

4.使用getchar();

使用scanf函数后使用getchar();。可以清除输入缓冲区中的回车符或清除空格

#include<stdio.h>
int main()
{
     int a,b,c,x,y,z; 	
     scanf("%d,%d,%d",&a,&b,&c);
     getchar(); 
     scanf("%c%c%c",&x,&y,&z);
     printf("%d,%d,%d\n",a,b,c);
     printf("x=%c,y=%c,z=%c\n",x,y,z);
     return 0;
}

运行结果:
在这里插入图片描述
在这里插入图片描述

5.使用fflush(stdin)函数

使用scanf函数后使用fflush(stdin)函数。可清除输入缓冲区,避免回车对后续读取字符的影响。(无法清除空格)

#include<stdio.h>
int main()
{
     int a,b,c,x,y,z; 	
     scanf("%d,%d,%d",&a,&b,&c);
     fflush(stdin); 
     scanf("%c%c%c",&x,&y,&z);
     printf("%d,%d,%d\n",a,b,c);
     printf("x=%c,y=%c,z=%c\n",x,y,z);
     return 0;
}

运行结果:
在这里插入图片描述

6.使用while(getchar()!='\n');

使用scanf函数后加上while(getchar()!='\n');。可以清除输入缓冲区中的回车符。(无法清除空格)

#include<stdio.h>
int main()
{
     int a,b,c,x,y,z; 	
     scanf("%d,%d,%d",&a,&b,&c);
     while(getchar()!='\n'); 
     scanf("%c%c%c",&x,&y,&z);
     printf("%d,%d,%d\n",a,b,c);
     printf("x=%c,y=%c,z=%c\n",x,y,z);
     return 0;
}

运行结果:
在这里插入图片描述

梦渊ya
关注 关注
  • 47
    点赞
  • 150
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一个C语言关键字scanf,C语言中利用scanf语句输入多个值的问题
weixin_42475535的博客
05-22 7060
1、有一个很严重的错误,输入字符数组的两个scanf("%d %s %c %c",&person[i].num,&person[i].name,&person[i].sex,&person[i].job);scanf("%s",&person[i].category.position);2、把这两行中字符数组输入前面的&符号去掉,对字符数组输入本身...
C&C++输入方法总结
hunterlew的专栏
09-07 2559
这个总结缘于暑假刷ACM的候发现在不同的输入格式下有候不知道怎么处理,甚至会影响后面对数据的处理方法的选择,容易卡住,然后把间都花在百度“怎么输入带空格的字符串”等一系列初级问题。做个总结。 1. 输入多个整数 如果是一次输入,存完然后再统一处理,一般就scanf("%d %d",&a,&b);输入a和b用空格或回车都可以,因为 scanf不识别空格和回车! 如果是多次输入输入
深入分析C语言中格式化输入函数scanf使用.pdf
09-19
深入分析C语言中格式化输入函数scanf使用.pdf
关于scanf的多行输入
最新发布
2401_82986109的博客
07-29 831
经过调试发现第二组输入scanf数据会把第一组覆盖掉,查阅资料后了解到scanf的多行输入可以使用while循环,正确代码如下。入坑C语言一周后,今天在写一道关于scanf多行输入的问题遇到了一点疑惑。起初我并没有关注网页上这段初始代码就是scanf的多行输入。而是直接全部删除自己敲,于是就写成了这样。在我进行测试,发现结果只会输出一组数据
c语言关于连续两个scanf 第一个scanf输入完以后第二个scanf会被吃掉怎么解决
zywlwx的博客
07-20 298
当两个连续scanf在一起,第一个输入完以后按回车键,程序会跳过第二个scanf就直接结束,这个候只需要在两个scanf中间加一个getchar把回车键吸收了就行,因为回车键也算是一个字符,它会被默认传给第二个scanf,所以程序会直接结束。
C语言中用scanf连续输入两个…
热门推荐
少波波波波少
05-07 1万+
原文地址:C语言中用scanf连续输入两个字符类型的问题作者:Hoper昨天用C编程,遇到一个关于scanf的细节问题,假如运行如下程序: #include int main(void){   char a[100];   char k;   int i,loc;   printf("请输入字符串:");   scanf("%s",a);   printf("n请输入要插入的字符:");   
scanf连续输入个数数据_学了这么久的C语言,你真的懂scanf函数么?
weixin_29443363的博客
01-14 4870
很多人可能到现在也不是很明白stdio.h这个头文件有什么作用,初学者看书的候应该看到过这句话:C语言本身是不包含输入输出语句的。 printf 函数scanf 函数一样,都被声明在头文件stdio.h里。(特殊IDE除外) 如果在开头没有加stdio.h,你如果不用输入输出语句是没有一点问题的,代码为证:先看下scanf的用法:scanf(格式控制,地址...
c语言scanf()多次输入
dongjuhui3212的博客
03-23 3608
c语言中,经常会有在标准输入多次输入。 用scanf()、gets()等多次使用标准输入,注意非法字符影响下次输入。解决方法: char c; while((c=getchar())!='\n') continue; 转载于:https://www.cnblogs.com/keyhallen/p/4361115.html...
C语言基础中多次使用scanf问题解决
qq_44303416的博客
09-12 2364
项目场景: C语言基础中多次使用scanf问题。 问题描述: 提示:C语言中多次使用scanf("%c",*)输出异常,在此做个记录。 #include "stdio.h" int main() { char a,b,c,d,e,f; printf("input character a,b\n"); scanf("%c%c",&a,&b); // getchar(); printf("%c,%c\n",a,b); scanf("%c,%c",&c,&d); //
C语言scanf多组输入的三种方法!你真的了解嘛?
LT15171009269的博客
10-24 3241
scanf函数你还只会输入嘛?这篇文章带你认识不一样的scanf( ),彻底了解scanf函数的两种输入方法,以及返回值的应用。并且本博主还附上了练习题边学边练才有真收获。带你看不一样的博客!
C语言scanf多组输入的三种方法!
鸽芷咕的博客
07-04 1万+
scanf函数你还只会输入嘛?这篇文章带你认识不一样的scanf( ),彻底了解scanf函数的两种输入方法,以及返回值的应用。并且本博主还附上了练习题边学边练才有真收获。带你看不一样的博客!
C语言输入函数(scanf()、fgets()和gets())的区别详解
01-01
它是一种格式化的输入方式,可一次性按照规定的格式输入多个数据域。 scanf函数是一个标准库函数,它的函数原型在头文件“stdio.h”中。与printf函数相同,C语言也允许在使用scanf函数之前不必包含stdio.h文件。 ...
详解C语言scanf函数使用的一些注意点
01-20
当执行到scanf函数,程序就暂停等待用户输入,该函数只接受变量的地址,格式为&变量名。是一个阻塞式的函数,2用户输入完毕后,则将值赋值给变量,至此函数调用完毕。敲回车键告知计算机键入完毕。 (二)使用注意...
c语言输入个数格式化,C语言的格式化输入函数scanf
weixin_33739387的博客
05-21 1234
scanfC语言的标准输入输出库stdio中提供的库函数,所以在使用,需要使用预处理指令#include 包含stdio.h头文件。scanf的功能是根据由格式化字符串表示的特定格式读取输入输入参数包括格式化字符串和用以存储输入的变量地址。变量地址(指针)的个数没有限制,但要保证格式化字符串中的转换说明的数量和类型与对应位置的输入变量一致。scanf(格式化字符串, 变量地址1,变量地址2...
C语言连续使用scanf函数无效的错误
qq_41821743的博客
12-18 924
C语言连续使用scanf函数无效的错误 用C语言实现的模拟shell中需要接收相应的命令,在子进程中接收命令并进行相应的操作,父进程回收,而在加进父进程接收结束命令,偶尔scanf函数会莫名其妙自动跳过。查阅资料得知:第一个scanf函数接收完命令后回车也会被接收进缓冲区,缓冲区是和进程绑定的,进程销毁则对应进程的缓冲区也清空,因此子进程并未受到影响,而父进程在循环过程中不断接收,而回车字符并未进行处理因此造成莫名其妙跳过第二个scanf函数。 解决方法 解决方法为在scanf函数中多加一个字符来接收回
Scanf连续调用多次并且存在%c的问题
apple01010105的博客
02-04 247
问题现象: 当程序中存在多个scanf,针对第一个scanf输入,一般用户会以空白字符(空格、换行、tab、换页符)等结束。但若后面有一个scanf(“%c”,&ch),则刚才输入的空白字符会被此次的scanf读入,因此空白字符也是一个字符,此将导致ch为空。 原因解释: scanf的工作原理:(一般情况,即格式串中没有其它字符)用户的任何输入将被保存在缓冲之中...
scanf()函数--连续输出的(看了秒懂,超详细!!!!)
weixin_45031801的博客
10-09 4528
在写这篇文章之前,我对这些基础的函数总是持有一种似懂非懂的感觉没有太在意,直到我在刷题中遇到了满屏的烫烫烫烫烫烫烫烫烫烫烫烫趟或者就是输入字符总是不符合题目格式要求,至此我专门看了一些大佬的文章,做出了我得理解。
C语言连续使用scanf()函数出现的问题
PyDongJava的博客
11-27 4722
#include<stdio.h> int main() { char string_c[20],*c; printf("input string:\n"); scanf("%c",string_c); printf("input a char:\n"); scanf("%c",c); pritnf("%s %c",string_c...
c 语言连续输入字符型数据
annuo7626的博客
02-01 1099
1 #include<stdio.h> 2 #include<stdlib.h> 3 4 void Input1(char* &str){ // 5 /* 6 这种情况下想要逐个输入字符串数组,那么在每次输入一个元素后不要加空格或者按回车, 7 否则不可见的空格符和换行符也会...
c语言scanf连续多次输入只能获取最后一个值
06-10
这通常是因为输入缓冲区中仍然存在未被读取的字符,导致下一次输入直接从缓冲区读取而不是等待用户输入新的数据。解决方法可以使用 fflush(stdin) 清空输入缓冲区,或者在每次输入使用 getchar() 读取并丢弃缓冲区中的换行符。另外,也可以使用 fgets() 函数来代替 scanf(),这样可以避免输入缓冲区的问题。
写文章

热门文章

  • 【C语言】转义字符(\a \b \t \v \f \r 等) 25446
  • 【C语言】连续使用多个scanf函数时输入数据 14783
  • 【C语言】数组知识总结(2)—— 字符串的输入输出 7905
  • 【C语言】数据类型 数据类型转换 常量 变量 运算符和表达式(知识总结) 2435
  • 第十届统计建模比赛知识总结及spss分析方法介绍 2012

分类专栏

  • 数据结构与算法 2篇

最新评论

  • 【Java】static-静态变量、静态方法、工具类、注意事项、args数组的使用

    CSDN-Ada助手: Java 技能树或许可以帮到你:https://edu.csdn.net/skill/java?utm_source=AI_act_java

  • 【C语言】转义字符(\a \b \t \v \f \r 等)

    梦渊ya: \n是换行,光标移到下一行 \r是光标移到同一行首位

  • 【C语言】转义字符(\a \b \t \v \f \r 等)

    Aly_Lu: \n和\r有什么区别呀

  • 【C语言】转义字符(\a \b \t \v \f \r 等)

    梦渊ya: 输出是5,但是\95是错误表示,加\是表示后面的数字是八进制数,只能0~7

  • 【C语言】转义字符(\a \b \t \v \f \r 等)

    l_2020: char c='\95'; c是多少,怎么理解?

大家在看

  • 【C++】C++11新特性——可变参数模版、lambda、包装器
  • 工作日志:elementplus表演验证和提交 17
  • Python酷库之旅-第三方库Pandas(163)
  • C++ | Leetcode C++题解之第504题七进制数
  • 基于卷尾猴算法优化的灰度熵图像多阈值分割 324

最新文章

  • 【python】reverse()和reversed()
  • 【python】ord() chr()
  • 【python】sorted() list.sort()
2024年11篇
2023年14篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家湖滨玻璃钢雕塑定制玻璃钢动物雕塑电话咨询福建特色商场美陈现价郑州标牌玻璃钢雕塑小品宣城学校玻璃钢雕塑北京大型商场创意商业美陈风格卡通玻璃钢雕塑代理商安徽水果玻璃钢雕塑多少钱玻璃钢雕塑麒麟无锡专业玻璃钢雕塑推荐精细玻璃钢座椅雕塑泸州玻璃钢仿真水果雕塑衢州玻璃钢景观雕塑生产厂家山西省玻璃钢雕塑定制玻璃钢雕塑牛价格仿铜玻璃钢雕塑造价内蒙古玻璃钢动物雕塑大同供应玻璃钢雕塑倾销玻璃钢品牌ip雕塑卡通玻璃钢人物雕塑尺寸封开玻璃钢卡通雕塑厂家商丘景观标识玻璃钢雕塑江西玻璃钢花盆造型商场美陈都是什么公司做的浙江周年庆典商场美陈供应商玻璃钢创意造型雕塑广东玻璃钢植物雕塑玻璃钢花盆儿童画绍兴玻璃钢陶瓷雕塑介绍河北大型商场创意商业美陈策划香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化