【问题标题】:Switch statement letter to integer将语句字母转换为整数
【发布时间】:2013-09-30 23:11:59
【问题描述】:

假设从 A 到 F 的等级对应于从 1 到 6 的数字。编写一个程序,输入三个字母等级并打印平均数字等级。我的代码如下所示: PS:我希望它打印出三个字母输入的平均值。 (我考虑到这段代码可能完全错误,因此最终代码应该包含“开关”和数字/整数中三个对应值的计算。请帮助)。

int main(){
char x,y,z;
int num;
float avg;
printf("\n Give three grades:\n");
scanf("%d %d %d", &x, &y, &z);

switch(x,y,z){

case 'a': return 1;
break;
case 'b': return 2;
break;
case 'c': return 3;
break;
case 'd': return 4;
break;
case 'e': return 5;
break;
case 'f': return 6;
break;
}
avg = x+y+z /3;
printf("\n The average is: %d \n", avg);
return 0;
}`

【问题讨论】:

  • 谢谢稻田。我怎么能在没有开关的情况下解决这个问题(以初学者熟练的程序方式)。再次感谢指点
  • 看我的回答。我使用了三元运算符 (?:),这可能不是初学者。您可以对if .. else .. 执行相同的操作。如果您不知道tolower,您可以将grade-'A'grade-'a' 分开。我认为您需要不区分大小写。
  • 我应该指出,在scanf 中使用%d 不会读取字符。也许你想要%c
  • 建议printf("\n The average is: %.1f\n", (x+y+z) / 3.0);

标签: c switch-statement average


【解决方案1】:

您一次只能打开一个值。你为什么不把它变成一个函数:

int grade_value( char grade )
{
    switch(grade) {
       case 'a':
       case 'A':
          return 1;

       case 'b':
       case 'B':
          return 2;

       // etc...

       default:
          return 0;
    }
}

然后为xyz 中的每一个调用它。你真的根本不需要使用switch,但没关系。 例如

int grade_value( char grade )
{
    int value = tolower(grade+1) - 'a';
    return (value >= 1 && value <= 6) ? value : 0;
}

另外,请注意,您应该使用%f 输出float,而不是%d(输出int)。

您还误解了switch 的工作原理。在您的main 中,您从每个case 切换和return。这将退出main 并返回一个值。这意味着您的程序将终止。

可以在我为你推荐的函数中使用return,因为它不是你的main。它会立即从函数中返回给定的值,因此你不需要 `break'。

【讨论】:

  • 如果没有switch (正如您已经提到的那样)如何做到这一点,并解释为什么可以编译 OP 的代码,那就太好了。只是一个建议。
  • 当然@KirilKirov,谢谢。我没有提到数学错误。我认为只是修复switch 是问题的主要范围。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-03
  • 2013-02-08
  • 2013-12-01
  • 2015-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多