使用带数字大小写和字符大小写的开关

时间:2016-11-18 13:57:59

标签: c char switch-statement case

我想制作一个switch循环。

如果输入来自15。它会打印一个数字。否则它将打印"this is not a number"。如果输入是'e'。应该结束switch循环。

我可以将数字设为部分,但我不知道如何使用'e'进行输入。它只是不会读。这是我的代码:

int main() {
int i,a = 0;
printf("Write something:");
scanf("%d", &i);
    do{
    switch (i)
    {
    case 1:
        printf("1");
        break;
    case 2:
        printf("2");
        break;
    case 3:
        printf("3");
        break;
    case 4:
        printf("4");
        break;
    case 5:
        printf("5");
        break;
    case 'e':
        a=1;
        break;
    default:
        printf("This is not a number”); 
        break;
    }
}while (a==0);}

我的问题是我无法输入'e'或任何字符。因为如果我这样做,我将创建一个悖论循环或根本不工作。我哪里错了?

5 个答案:

答案 0 :(得分:1)

当你说“e”时,你实际上在说“'e'的价值”。这是ASCII值。 'e'的十进制值实际上是101.

要使其工作,您可以使用char数据类型。将数据作为char读入,并在switch语句中,而不是数字,而是使用char。 e.g。

switch (i)
{
case '1': 
  //do something
  break;

答案 1 :(得分:0)

只需将整数视为此字符;

顺便说一下,你可能希望每次都通过while循环阅读一个新角色,否则你将永远陷入打印状态。

int main() {
    char i,a = 0;
    printf("Write something:");
    scanf("%c", &i);
    do{
        switch (i)
        {
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
            printf("%c",i);
            break;
        case 'e':
            a=1;
            break;
        default:
            printf("This is not a number”); 
            break;
        }
    }while (a==0);
}

答案 2 :(得分:-1)

您可以将切换设为switch(char)。将您的输入转换为char(因为它是1到5,它可以是一个字符)。然后检查case '1': case '2'等。

编辑:您需要将输入作为字符

char i;
int a = 0
printf("Write something:");
scanf("%c", &i);

然后

switch(i){

答案 3 :(得分:-1)

您无法执行此操作,因为在您的scanf中您指定输入为小数(%d)。 如果你想检查它是否是一个数字,你必须处理字符。 例如:

char c;
    while (42)
{
scanf("%c", &c);
if (getnbr(c) < 1 && getnbr(c) > 5)
     printf("%c", c);
else
     printf("This is not a number”); 
}

这样的事情......希望我帮助过。

答案 4 :(得分:-1)

其他人建议使用%c,这样你就不会将字符与整数混合,但是你需要小心其余的代码。您可能需要为switch语句进行强制转换。

int i;
printf("Input:\n");
scanf(" %c", &i);

switch ((char)i)
{
    case '1':
        printf("Got number 1\n");
        break;
    case '2':
        printf("Got number 2\n");
        break;
    case 'e':
        printf("GREAT\n");
        break;
}
编辑:Karston Koop提出了一个很好的问题。我对该演员的推理仅仅是整数i未初始化。来自scanf的格式化写入将仅初始化整数4字节的最低/最高(取决于硬件)字节 - 其余可以用垃圾填充,具体取决于为整数变量保留的4字节堆栈中的内容。如果它是char,则所有位都将由scanf初始化。因此,我们只希望switch语句的低/高字节原样,因此需要强制转换。为了解决这个问题,你可以初步宣传i = 0.然后演员阵容变得多余。我会留下这个,因为它可能对将来有用。感谢Karston对此进行了问答。