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/103953376


2020-01-14

腊月二十,还未回家。假期三周,年前一周,年后两周!!!刚把得!!!

转载地址:https://blog.csdn.net/answerMack/article/details/103975086 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:C primer plus自用知识点整理(第九章)函数和指针
下一篇:C primer plus自用知识点整理(第八章)字符输入输出函数、输入验证(混合输入)

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月03日 16时17分00秒