71516 2024-04-13 22:48 采纳率: 0%
浏览 0

为什么无法输入y或n

第一次运行没问题但是第二次在重新输入就无法输入y或n了这是为什么

img

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-13 22:48
    关注

    引自免费微信小程序:皆我百晓生

    在您的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进行解析,这样可以更灵活地处理各种输入情况。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月13日

悬赏问题

  • ¥15 PointNet++的onnx模型只能使用一次
  • ¥20 西南科技大学数字信号处理
  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。