【c语言】 gets()函数不执行/被跳过
同样是做大一小孩的作业
有一道题是要求输入10本图书信息,并查找指定书名和价格高于某个数值的图书信息。
#include<stdio.h>
#include<string.h>
struct Book{int id;char name[50];char author[10];double price;
};
bool is_book(char str[],Book a){if(strcmp(str,a.name)==0)return 1;else return 0;
}bool higher_price(Book a,double b){if((a.price - b) > 0) return 1;else return 0;
}int main(){Book book[10];char a[50];double price;int i,j=0;printf("请依次输入10本图书的书号、书名、作者、价格:\n");for(i=0;i<10;i++){scanf("%d%s%s%lf",&book[i].id,&book[i].name,&book[i].author,&book[i].price);}printf("请输入书名:\n");//fflush(stdin);gets(a);printf("该图书信息为:\n"); for(i=0;i<10;i++){if(is_book(a,book[i]))printf("书号:%d\t书名:%s\t作者:%s\t价格:%.2lf\n",book[i].id,book[i].name,book[i].author,book[i].price);}printf("请输入价格:\n");scanf("%lf",&price); printf("高价图书信息为:\n");for(i=0;i<10;i++){if(higher_price(book[i],price))printf("书号:%d\t书名:%s\t作者:%s\t价格:%.2lf\n",book[i].id,book[i].name,book[i].author,book[i].price);} return 0;
}
使用gets()函数接收书名
但是在运行的时候,gets函数没有执行,被跳过执行后面的语句了。
后来找到答案是因为:
之前scanf的时候,会遗留一个’\n’在缓冲区里,
因此,gets()误将这个回车作为了它的输入。
应在gets函数之前使用,fflush(stdin);清空默认缓冲区
(使用stdin,不是自己定义的gets(a)数组的数组a)
修改之后:
printf("请依次输入10本图书的书号、书名、作者、价格:\n");for(i=0;i<10;i++){scanf("%d%s%s%lf",&book[i].id,&book[i].name,&book[i].author,&book[i].price);}printf("请输入书名:\n");fflush(stdin);gets(a);
结果正确:
【c语言】 gets()函数不执行/被跳过相关推荐
- c语言如何让函数一直执行,C语言如何实现在每天某个特定时间执行某个函数?
慕仙森 Windows提供了定时器,帮助编写定期发送消息的程序.定时器一般通过一下两中方式通知应用程序间隔时间已到.⑴ 给指定窗口发送WM_TIMER消息,也就是下面的给出在窗口类中使用的方法.⑵ 调 ...
- c语言使用free释放指针报错,C语言中的free函数用法执行机制分析
free函数是C语言或者C++程序语言的常用函数,那么free函数有什么用途呢?free函数又怎么用呢?C语言中的free函数用法执行机制分析,一起来看看free内部的机制以及和delete的对比分析 ...
- 在 main 函数之前执行代码(C 语言)
main 函数 又称主函数,是程序执行的起点. 在 main 函数之前 那么,我们有办法在 main 函数之前执行代码吗? 答案是肯定的. 先上代码 before_main.c #include &l ...
- C语言调用函数一次就自动结束了 不执行下面的程序 帮忙看看把
我自己定义了一个打印print函数 ,在主程序中如果把这个print函数放在其他函数前执行了 程序直接就运行结束了 不执行在他后面的程序 .有人能看看这是什么原因吗?
- C语言atoi()函数用法
C语言atoi()函数用法 头文件:#include <stdlib.h> atoi() 函数用来将字符串转换成整数(int),其原型为: int atoi (const char * s ...
- 一起学习C语言:函数(三)
上一篇<一起学习C语言:函数(二)> 中,我们了解了内部函数和外部函数,以及变量的声明周期与作用域.本章节,我们分析函数的存储类别与声明方式,以及函数的递归调用原理. 章节预览: 6. 变 ...
- 一起学习C语言:函数(二)
上一篇<一起学习C语言:函数(一)> 中,我们了解了函数的概念,以及函数实现与程序编译过程.本章节,我们分析内部函数和外部函数,以及变量的生命周期. 章节预览: 4. 外部函数与内部函数 ...
- C语言—字符串函数和内存函数
文章目录 1.前言 2.字符串函数 2.1 长度不受限制的字符串函数 2.1.1 strlen 内部细节 使用方法 模拟实现 2.1.2 strcmp 内部细节 使用方法 模拟实现 2.1.3 str ...
- 51单片机c语言编程函数,单片机C语言教程:C51函数
其实一直出现在例子中的 main()也算是一个函数,只不过它比较特殊,编译时以它做为程序的开始段.有了函数C 语言就有了模块化的优点,一般功能较多的程序,会在编写程序时把每项单独的功能分成数个子程序模 ...
最新文章
- CFString​Transform
- python列表的切片操作
- Shell之awk常用用法
- [development][PCRE] old PCRE
- Android中当item数量超过一定大小RecyclerView高度固定
- linq group by 多个字段取值以及取出重复的数据
- ASP.NET C# 文件下载速度限制
- 同花顺 sendmessage python_进程通信-SendMessage使用方法
- Ribbon和Feign的对比-带简易例子
- 出租车轨迹数据地图匹配
- 常用生物信息学格式介绍
- 微信小游戏(字节小游戏、QQ小游戏)如何实现强制更新版本
- 专家全方位剖析网页木马
- SecureCRT8.3.3软件包百度网盘
- UML用例图-软件需求分析与设计(很详细,很详细,很详细)
- 在网页上实现大华视频监控摄像头在线
- 【详解】为何三元一次方程可以表示一个平面
- 实验一:鸢尾花数据集分类
- android 5.x—Elevation阴影
- 基于卷积神经网络CNN的电影推荐系统
热门文章
- PAT乙级(1004 成绩排名)
- python 字符串替换换行,Python fstring:替换换行符/lineb
- Oracle 19c集群重装步骤详解
- 连载四:Oracle升级文章大全(完结篇)
- 详述WebLogic反序列化远程命令执行漏洞的处理过程,云和恩墨技术通讯精选
- 区块链交易隐私如何保证?华为零知识证明技术实战解析
- 小熊派开发板实践:智慧路灯沙箱实验之真实设备接入
- 【华为云技术分享】小白学YOLO:一文带你学YOLOv1 Testing
- 云图说|SAP技术画册“一点通”
- SpringBoot之Thymeleaf