第一次运行没问题但是第二次在重新输入就无法输入y或n了这是为什么
4条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
在您的C语言程序中,
scanf
函数在读取用户输入时遇到了问题,导致无法正确地读取'y'或'n'。问题出在第一个scanf
函数中的格式字符串 "%1f,%d" 上。当您输入 "10000,2" 这样的数据后,逗号(,)也被当作有效输入的一部分被
scanf
处理了。因此,当程序执行到第二个scanf(" %c",&ch);
时,scanf
会尝试从缓冲区中读取下一个字符,但此时缓冲区中的下一个字符是逗号(,),而不是'y'或'n'。所以,即使您输入'y'或'n',scanf
也无法正确识别,因为它还在等待之前未处理完的逗号。为了解决这个问题,您可以在读取年份之后添加一个空格,以便跳过逗号。这样,无论用户输入的是多少个数字,都会被正确读取,并且接下来的
scanf
函数就能正确地读取'y'或'n'了。以下是修改后的代码片段:#include<stdio.h> #include<math.h> int main() { double rate; double capital; double deposit; int year; char ch; printf("input capital,year:\n"); scanf("%lf,%d", &capital, &year); // 修改了%f为%lf以适应双精度浮点数 // 在这里添加一行,用于跳过逗号 getchar(); printf("compound interest(Y/N)?\n"); scanf(" %c", &ch); switch(year) { case 1: rate = 0.0225; break; case 2: rate = 0.0243; break; case 3: rate = 0.0270; break; case 4: rate = 0.0288; break; case 5: rate = 0.0300; break; default: printf("error year:\n"); return 0; } if(ch == 'Y' || ch == 'y') deposit = capital * pow(1 + rate, year); else if(ch == 'N' || ch == 'n') deposit = capital * (1 + rate * year); printf("rate=%.4f,deposit=%.4f\n", rate, deposit); return 0; }
现在,每次运行程序时,应该都可以正常输入'y'或'n'了。注意,这里的
getchar()
函数用于获取并丢弃掉输入流中的下一个字符,这里是逗号(,)。不过这种方法并不总是最优雅的解决方式,因为它依赖于特定的输入格式。如果可能的话,建议使用fgets
函数来读取整个行,然后使用sscanf
进行解析,这样可以更灵活地处理各种输入情况。解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 phython如何实现以下功能?查找同一用户名的消费金额合并—
- ¥15 孟德尔随机化怎样画共定位分析图
- ¥18 模拟电路问题解答有偿速度
- ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
- ¥15 误删注册表文件致win10无法开启
- ¥15 请问在阿里云服务器中怎么利用数据库制作网站
- ¥60 ESP32怎么烧录自启动程序
- ¥50 html2canvas超出滚动条不显示
- ¥15 java业务性能问题求解(sql,业务设计相关)
- ¥15 52810 尾椎c三个a 写蓝牙地址