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

为什么无法输入y或n

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

img

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 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 phython如何实现以下功能?查找同一用户名的消费金额合并—
  • ¥15 孟德尔随机化怎样画共定位分析图
  • ¥18 模拟电路问题解答有偿速度
  • ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
  • ¥15 误删注册表文件致win10无法开启
  • ¥15 请问在阿里云服务器中怎么利用数据库制作网站
  • ¥60 ESP32怎么烧录自启动程序
  • ¥50 html2canvas超出滚动条不显示
  • ¥15 java业务性能问题求解(sql,业务设计相关)
  • ¥15 52810 尾椎c三个a 写蓝牙地址