鱼C论坛

 找回密码
 立即注册
查看: 621|回复: 2

[已解决]一个小问题

[复制链接]
发表于 2020-8-22 16:14:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
大佬们为啥这一段switch没有生效啊,直接就进入下次循环了
0.png
这是缩减版代码:
#include <stdio.h>
float jiafa(float opr1, float opr2);
int main()
{
        int on_off;
        char select, buttom;
        float opr1, opr2, outcome;
        
        printf("请选择你要的功能:\n");
        printf("*************************************\n");
        printf("a:加法\t\tb:减法\n");
        printf("c:乘法\t\td:除法\n");
        printf("q:退出\n");
        printf("*************************************\n");
        while(scanf("%c", &select)){
                switch(select){
                        case 'a':
                                on_off = 1;
                                while(on_off){
                                        while(1){
                                                printf("请输入第一个操作数:");
                                            if(scanf("%f", &opr1) == 0){
                                                    getchar();
                                                    printf("请输入正确的数字!\n");
                                                    printf("再次输入!");
                                                    continue;} 
                                            else break;}
                                        while(1){
                                                printf("请输入第二个操作数:");
                                            if(scanf("%f", &opr2) == 0){
                                                    getchar();
                                                    printf("请输入正确的数字!\n");
                                                        printf("再次输入!");
                                                        continue;}
                                            else break;}
                                        outcome = jiafa(opr1, opr2);
                                        printf("结果是:%.2f", outcome);
                                        printf("是否继续,按y继续,按n返回主菜单:");
                                        scanf("%c", &buttom);
                                        switch(buttom){
                                                case 'y':printf("请输入一次组计算数据\n");break;
                                                case 'n':on_off = 0;break;
                                                default:printf("请输入正确选项!\n");continue;
                                        }
                                }break;} 
        printf("再见!");
        
        return 0;
}
} 
        
float jiafa(float opr1, float opr2){
        float output;
        output = opr1+opr2;
        return output;
}
最佳答案
2020-8-22 16:34:41
之朝百 发表于 2020-8-22 16:18
我在后面加了getchar()就正常了,可是我不明白,是什么卡住了scanf导致读取失败,换行符吗?scanf不是会跳 ...

scanf使用%c读取字符的时候,不会跳过空白符,直接读取缓冲区中的第一个字符。
因为你的程序之前读取过其他内容,因此会在缓冲器留下分隔字符(即空白符),所以这里你再次读取%c的时候就会读取到'\n'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-8-22 16:18:49 | 显示全部楼层
我在后面加了getchar()就正常了,可是我不明白,是什么卡住了scanf导致读取失败,换行符吗?scanf不是会跳过空白符吗?
改良.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-22 16:34:41 | 显示全部楼层    本楼为最佳答案   
之朝百 发表于 2020-8-22 16:18
我在后面加了getchar()就正常了,可是我不明白,是什么卡住了scanf导致读取失败,换行符吗?scanf不是会跳 ...

scanf使用%c读取字符的时候,不会跳过空白符,直接读取缓冲区中的第一个字符。
因为你的程序之前读取过其他内容,因此会在缓冲器留下分隔字符(即空白符),所以这里你再次读取%c的时候就会读取到'\n'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 07:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表