鱼C论坛

 找回密码
 立即注册
查看: 1065|回复: 3

进制的问题

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

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

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

x
# include <stdio.h>

int main(void)

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

                switch (man)
                {

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

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

为什么输入a 和数字97后执行printf("%d",man);的结果会不一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-9-24 11:12:57 | 显示全部楼层
输入a时,程序会将'a'的ASCII码值97赋值给变量man,然后执行printf("%d",man);语句,输出97。

而输入数字97时,程序会直接将数字97赋值给man,然后执行printf("%d",man);语句,输出97。

所以,虽然输入的是不同的字符和数字,但输出的结果是一样的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-24 11:13:06 | 显示全部楼层
问题分析:
这段代码中,通过循环不断读取用户输入,并在每次输入后使用 switch 语句判断输入的内容。如果输入的是 'a',则输出 "mans",否则输出 "ma"。

现在的问题是:为什么输入 'a' 和数字 97 后,执行 printf("%d", man) 的结果会不一样?

答案:
在该程序中,man 是一个整型变量,所以当 scanf_s 函数读取到输入时,无论输入的是字符 'a' 还是数字 97,都会被转换成相应的整数值存储在 man 变量中。因此,输入 'a' 和数字 97 后,man 的值都会被设置为 97。

然而,当我们执行 printf("%d", man) 时,结果却不一样。这是因为,在 C 语言中,字符字面量 'a' 对应的 ASCII 码值恰好是 97。因此,如果我们输入 'a' 并将其作为整数值打印出来,它将显示为 97,与输入数字 97 的结果相同。

因此,输入 'a' 和数字 97 后,man 的值是相同的,但是 printf("%d", man) 的输出结果不同。这是因为输入的 'a' 被解释为 ASCII 码值而不是字符 'a' 本身。

为了避免这种混淆,可以考虑将输入和输出都使用字符格式化符进行处理,这样可以保证输入和输出的结果始终与输入的字符相同。例如,可以将 scanf_s 函数调用中的 "%d" 改为 "%c",将 printf 函数调用中的 "%d" 改为 "%c",并将 man 的类型改为字符类型 char。

球一个最佳答案谢谢啦!这对我非常重要!
回答可能有误,多多谅解!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-24 11:13:08 | 显示全部楼层
这是因为你在 scanf_s 函数中使用 %d 格式控制符来读取输入,该格式控制符用于读取整数。当你输入 a 时,它会被解释为字符 'a' 的ASCII码值,并赋给整数变量 man,ASCII码中字符 'a' 的值为 97。

printf("%d", man); 语句中,%d 格式控制符用于输出整数。因此,当 man 的值为 'a' 时,它会按照整数处理并输出其对应的ASCII码值 97。

要正确输出字符 'a',你可以将 man 的类型改为字符类型 char,并使用 %c 格式控制符进行输入和输出。修改后的代码如下:
#include <stdio.h>

int main(void) {
    char man;

    printf("输入东西:");

    while (1) {
        scanf_s("%c", &man);
        getchar();

        printf("%c\n", man);

        switch (man) {
            case 'a':
                printf("mans\n");
                getchar();
                break;
                
            default:
                printf("ma\n");
        }
    }

    return 0;
}

这样,无论你输入的是字符还是数字,都会按照字符类型进行处理,并正确输出。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-6 04:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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