我想制作一个switch
循环。
如果输入来自1
到5
。它会打印一个数字。否则它将打印"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'
或任何字符。因为如果我这样做,我将创建一个悖论循环或根本不工作。我哪里错了?
答案 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对此进行了问答。