我正在尝试编写一个代码,它确实选择了一个int数或一个char,在一个字符串中,如果我的输入是一个char bettewen A和D,则显示我的年龄范围选项,如果我选择了一个年龄,则显示类。我是插入所有在一个大开关的情况下,但当我到“情况10:”简单的输入dosent工作,我没有看到使它工作。有关代码:
#include <stdio.h>
int main(){
char resp[300];
printf ("Inform the letter of the class\nOr the age of the student\n");
scanf (" %s", &resp[300]);
switch (resp[300]){
case 'a':
case 'A':
printf ("\nFor students in the class A\nThe age range is between 4~5 years.");
break;
case 'b':
case 'B':
printf ("\nFor students in the class B\nThe age range is between 6~8 years.");
break;
case 'c':
case 'C':
printf ("\nFor students in the class C\nThe age range is between 9~10 years.");
break;
case '4' ... '5':
printf ("\nFor the students in the age %s\nThe class will be A.", resp);
break;
case '6' ... '8':
printf ("\nFor the students in the age %s\nThe class will be B.", resp);
break;
case '9':
case 10:
printf ("\nFor the students in the age %s\nThe class will be C.", resp);
break;
default:
printf ("\nWe are out of class\nFor students below 4 yo\nOr more than 10yo.");
break;
}
return 0;
}
当我们得到值10时,代码简单地忽略了这种情况并结束程序,并且程序没有正确地显示4-9之间的字符串,有什么方法可以让开关工作吗?
我试着做一个条件,如果值是10,就转换它:
if (resp[300] == "10"){
resp [300] = x;}
并将case "10":
切换为case 'x':
。但这并不能使事情正常进行。
3条答案
按热度按时间voj3qocg1#
这声明了一个300个元素的char数组。由于字符串需要以零结尾,因此最多可以容纳299个字符。
应该是
scanf( " %s", resp )
。或者,更好的是scanf( " %299s", resp )
,以避免溢出。你应该始终检查
scanf()
及其兄弟的返回值。如果输入失败,则resp
将未初始化。这将访问
resp
的301 st元素(因为编号从0开始)。此元素不存在,访问是未定义的行为。如果你想要数组的最后一个元素,你可以使用resp[299]
,但这也不是你想要的。如果你想要 string 的最后一个字符,你可以使用resp[ strlen( resp ) - 1 ]
,但这也不是你想要的。您实际需要的是 * 第一个 * 字符,即
resp[0]
。除非你使用的是某种扩展语言,否则这根本不起作用; C没有
...
运算符。这不是你想的那样相反,它将字符的 binary 表示与 value 10进行比较。在ASCII中,这将是换行符。
总而言之,关于用户输入的强烈建议是使用
fgets()
来读取输入的 * 整行 *,然后在内存中解析它们(例如:使用strtol()
、strcmp()
或类似物)。强烈不鼓励在可能格式错误的用户输入上使用*scanf()
;*scanf()
是用来读取已知良好的数据的,它从错误中正常恢复的能力是有限的。switch
是不同的值。它不适用于范围,而且对于一般的字符串处理来说也是相当不合适的。qlzsbp2j2#
从你们所有人那里得到一些反馈,并做了一些研究,我用以下方式对我的问题提出了一个相当简单的解决方案:
42fyovps3#
其中一个答案已经列出并解释了代码中的错误。
因此,在这个答案中,我只会向你展示我将如何解决这个问题的代码:
此程序具有以下行为:
正如你所看到的,我设计了这样一个程序,它将检查输入是否有效,如果不是,它将自动重新提示用户进行新的输入。