-5

考虑两个代码。为什么他们给出不同的输出虽然相同的值已经分配给 i ,'i' 在两个代码中都是一个字符。

第一个代码-->(这里的值直接赋值给i)

void main()
 {
  char i=3;

  clrscr();
  switch(i)
     {
      default : printf("\nHi..\n");
          break;
      case 1:printf("\na");
         break;
      case 2:printf("\nb\n");
        break;
      case 3:printf("\nc");
          break;
      }
  }

第二次使用 printf-scanf--->

void main()
 {
  char i;
  printf("ENTER i");
  scanf("%c",&i);
  clrscr();
  switch(i)
     {
      default : printf("\nHi..\n");
                break;
      case 1:printf("\n\na");
         break;
      case 2:printf("\nb\n");
        break;
      case 3:printf("\nc");
          break;
      }
 }

在第二个代码中,当我给出 3 作为输入时,我得到“Hi ..”作为输出。是什么让这两个代码的工作方式不同..??

4

4 回答 4

1

从标准输入读取字符后:

scanf("%c",&i);

i将包含 ASCII 代码 3 (51) 而不是值 3,从而default导致switch.

解决方案是将您的变量声明为int并使用

scanf("%d",&i);

阅读它。

在第一个示例中,您分配i了整数值3,这与分配字符不同'3'。在 C 中,当您将值分配给char变量时,该值将表示特定于某个字符的代码(考虑到标准)。

在第二个示例中,scanf函数从 中读取一个字符stdin,由于使用 ,该字符被解释为一个字符%c,并将特定于读取字符的代码分配给给定变量。

于 2013-07-16T19:42:19.747 回答
1

在你使用的第一个

char i = 3

但是,当您使用 scanf 时,您实际上是在使用:

char i = '3'

这两个包含不同的值

请参阅以下 ASCII http://www.asciitable.com/

于 2013-07-16T19:43:02.593 回答
0

它与switch语句无关,而与scanf函数有关。

阅读它的文档,即scanf(3)手册页。另请参阅对一个非常相关的问题的答案。

请注意,char'3'不是编码为 3,而是ASCII中的 51

学习启用所有警告和调试信息(例如编译使用gcc -Wall -g)并学习使用调试器(即gdb

于 2013-07-16T19:42:09.543 回答
0

将您的代码更改为

char i  -> int i;

scanf("%c",&i) -> scanf(" %d",&i);
于 2013-07-16T19:42:53.680 回答