鱼C论坛

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

[已解决]switch问题

[复制链接]
发表于 2023-9-24 10:50:56 | 显示全部楼层 |阅读模式

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

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

x
# include <stdio.h>

int main(void)

{       
        char man;
        printf("输入东西:");
        while (1)
        {
                scanf_s("%d", &man);

                switch (man)
                {

                        case 'a':
                                printf("mans");
                                getchar();
                                break;

                        default:
                                printf("ma");
                }
               
        }
        return 0;
}


为什么显示屏会出现 屏幕截图 2023-09-24 024929.png
while 之后不用在执行scanf_s 函数吗
最佳答案
2023-9-24 10:51:03
在这段代码中,输入的是字符类型的变量man,但是在scanf_s函数中使用了%d,应该使用%c来读取字符类型的输入。同时,在输入字符后,输入缓冲区中仍然存在一个换行符,这个换行符会被下一个scanf函数读取,导致程序出现问题。因此,应该在scanf_s函数之后使用getchar函数来清除输入缓冲区中的换行符。修改后的代码如下:
#include <stdio.h>

int main(void)
{
    char man;
    printf("输入东西:");
    while (1)
    {
        scanf_s("%c", &man, 1);
        getchar(); // 清除输入缓冲区中的换行符

        switch (man)
        {
            case 'a':
                printf("mans");
                break;

            default:
                printf("ma");
        }
    }
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-9-24 10:51:03 | 显示全部楼层    本楼为最佳答案   
在这段代码中,输入的是字符类型的变量man,但是在scanf_s函数中使用了%d,应该使用%c来读取字符类型的输入。同时,在输入字符后,输入缓冲区中仍然存在一个换行符,这个换行符会被下一个scanf函数读取,导致程序出现问题。因此,应该在scanf_s函数之后使用getchar函数来清除输入缓冲区中的换行符。修改后的代码如下:
#include <stdio.h>

int main(void)
{
    char man;
    printf("输入东西:");
    while (1)
    {
        scanf_s("%c", &man, 1);
        getchar(); // 清除输入缓冲区中的换行符

        switch (man)
        {
            case 'a':
                printf("mans");
                break;

            default:
                printf("ma");
        }
    }
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-24 10:51:11 | 显示全部楼层
根据你提供的代码,存在以下问题:

1. %d 是用于读取整数的格式控制符,而你想读取字符,应该使用 %c 格式控制符。所以将 scanf_s("%d", &man); 改为 scanf_s("%c", &man);

2. switch 语句中的 case 'a' 中的 'a' 应该是字符常量,而不是字符串常量,所以应该写成 case 'a':

3. 在 default 分支中使用 printf("ma"); 应该加上换行符,即 printf("ma\n");

针对你的问题,即为什么显示屏会出现屏幕截图,这与代码的逻辑无关。可能是你在执行代码时,意外触发了某些截屏快捷键或软件的截屏功能。请确保你在执行代码时没有触发任何截屏操作。

另外,在 while(1) 循环中,你需要在 default 分支中添加合适的退出条件,否则程序将无限循环打印 "ma"。你可以使用一个条件变量(如 int flag = 0;)来控制循环,当条件满足时修改 flag 的值,从而跳出循环。

修改后的代码如下:
#include <stdio.h>

int main(void) {
    char man;

    printf("输入东西:");
    
    while (1) {
        scanf_s("%c", &man);
        
        switch (man) {
            case 'a':
                printf("mans\n");
                getchar();
                break;
                
            default:
                printf("ma\n");
                // 添加退出循环的条件
                flag = 1;
        }

        if (flag == 1) {
            break;
        }
    }

    return 0;
}

请注意,在使用 scanf_s 函数时,确保你的编译环境支持该函数,并正确设置了预处理指令。如果出现编译或运行错误,请根据具体的开发环境和编译器进行调整。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 23:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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