scanf_s和scanf函数读取数值时需要消除空白字符的方法
发布日期:2022-01-20 01:06:53
浏览次数:2
分类:技术文章
本文共 2549 字,大约阅读时间需要 8 分钟。
c primer plus第八章课后习题第8道
编写程序,显示提供一个加减乘除法的菜单。 题主在做这题的时侯忽略了一个问题:scanf在读取数值后会把换行符留在输入队列,下次调用函数就会返回这个换行符,导致我们不希望的行为。
解决方法:
第一种方法: 第二种方法: 在包含scanf函数中清理换行符!!!!! 课后习题代码(每个人有每个人的思路,所以答案不唯一)#include#include char get_first(void);char get_choice(void);float input_num(int n);int main(void){ char choice; float n1, n2, n3; while ((choice = get_choice()) != 'q') { if (choice == '\n')continue; switch (choice) { case 'a': n1 = input_num(0); n2 = input_num(1); n3 = n1 + n2; printf("%f + %f = %f \n", n1, n2, n3); break; case 's': n1 = input_num(0); n2 = input_num(1); n3 = n1 - n2; printf("%f - %f = %f \n", n1, n2, n3); break; case 'm': n1 = input_num(0); n2 = input_num(1); n3 = n1 * n2; printf("%f * %f = %f \n", n1, n2, n3); break; case 'd': n1 = input_num(0); n2 = input_num(1); while(n2 == 0.0) { printf("enter a number other than 0:\n"); n2 = input_num(1); } n3 = n1 / n2; printf("%f / %f = %f \n", n1, n2, n3); break; default:printf("please respond with a,s,m,d:\n"); break; } } printf("thank you using this system.\n"); getchar(); return 0;}char get_first(void){ int ch; while (1) { ch = getchar(); if (ch != ' ' && ch != '\t' && ch != '\n') break;//非空白字符退出循环。 } while (getchar() != '\n'); // continue;//其实这个continue没什么意义。上面加一个分号就好。 return ch;}float input_num(int n){ float num; char chnum; if (!n) printf("enter first num:"); else printf("enter second num:"); while (scanf_s("%f", &num)!=1) { while ((chnum=getchar())!='\n') putchar(chnum); printf(" is not an number.\n"); printf("please enter a number,such as 2.5,-1.78,or 3.0:"); } //while (getchar() != '\n')/*这才是重点*/ // continue; return num;}char get_choice(void){ char ch; printf("enter the operation of your choice:\n"); printf("a.add s.substract\n"); printf("m.multiply d.divide\n"); printf("q.quit\n"); ch = get_first(); while (ch != 'a' && ch != 's' && ch != 'm' && ch != 'd' && ch != 'q') { ch = get_first(); } return ch;}
书籍整理内容:
最近在看C primer plus(加深巩固自己的C语言技巧,为以后学习C++打个基础)。 里面知识针对自己以后要查的点整理出来。 使用工具:visual studio 2013 :https://blog.csdn.net/answerMack/article/details/103766020 :https://blog.csdn.net/answerMack/article/details/103805900 :https://blog.csdn.net/answerMack/article/details/103855794 :https://blog.csdn.net/answerMack/article/details/103870182 https://blog.csdn.net/answerMack/article/details/103891048 https://blog.csdn.net/answerMack/article/details/1039533762020-01-14
腊月二十,还未回家。假期三周,年前一周,年后两周!!!刚把得!!!转载地址:https://blog.csdn.net/answerMack/article/details/103975086 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
感谢大佬
[***.8.128.20]2024年04月03日 16时17分00秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
numpy学习汇总4-花式索引tcy
2019-04-26
numpy 学习汇总5-数组运算 tcy
2019-04-26
numpy 学习汇总6-统计函数 tcy
2019-04-26
numpy 学习汇总2-np.random随机函数 tcy
2019-04-26
python 学习汇总1:文件读写 tcy
2019-04-26
python 学习汇总53:闭包(中级学习- tcy)
2019-04-26
python 学习汇总54:operator模块(全 推荐- tcy)
2019-04-26
python 学习汇总64:类属性方法(初级学习- tcy)
2019-04-26
numpy 学习汇总10-dtype数据类型 ( 基础学习 tcy)
2019-04-26
numpy 学习汇总11-Matrix矩阵创建 ( 基础学习 tcy)
2019-04-26
numpy 学习汇总12-Matrix矩阵运算与数据类型转换 ( 基础学习 tcy)
2019-04-26
numpy 学习汇总13-numpy.linalg线性代数 ( 基础学习 tcy)
2019-04-26
numpy 学习汇总14-多维数组的轴sum(axis) ( 基础学习 tcy)
2019-04-26
pandas 学习汇总2 - 数据帧DataFrame创建(12种方法)( tcy)
2019-04-26
pandas 学习汇总3 - Series,DataFrame迭代iter( tcy)
2019-04-26
pandas 4 - 排序( tcy)
2019-04-26
pandas 学习汇总5 - index 创建( tcy)
2019-04-26
pandas 6 - 索引切片选择( tcy)
2019-04-26
pandas 学习汇总7 - 缺失数据( tcy)
2019-04-26