davidmou 发表于 2023-9-24 11:12:50

进制的问题

# 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);的结果会不一样

isdkz 发表于 2023-9-24 11:12:57

输入a时,程序会将'a'的ASCII码值97赋值给变量man,然后执行printf("%d",man);语句,输出97。

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

所以,虽然输入的是不同的字符和数字,但输出的结果是一样的。

Mike_python小 发表于 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。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
回答可能有误,多多谅解!

陶远航 发表于 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;
}


这样,无论你输入的是字符还是数字,都会按照字符类型进行处理,并正确输出。
如果问题已经解决,请设置最佳答案
页: [1]
查看完整版本: 进制的问题