【发布时间】:2020-07-06 11:58:45
【问题描述】:
#include <stdio.h>
int main()
{
unsigned char voto;
printf("Inserire il voto (da 2 a 10): ");
scanf("%d", &voto);
printf("\n\n\n%d ", voto);
if(voto > 1 && voto < 11)
{
printf("corrisponde al giudizio ", voto);
switch(voto)
{
case 2:
case 3:
case 4:
case 5:
printf("INSUFFICIENTE");
break;
case 6:
printf("SUFFICIENTE");
break;
case 7:
printf("DISCRETO");
break;
case 8:
printf("BUONO");
break;
case 9:
printf("MOLTO BUONO");
break;
case 10:
printf("OTTIMO");
break;
}
} else
{
printf("non e' un voto valido!");
}
printf("\n\n----------------------------");
return 0;
}
我会复制老师发给我的信息:
当 IF 比较 CHAR 和数字常量时,可能会发生两种情况:要么将数字常量转换为 UNSIGNED CHAR 并按字母顺序与 "voto" 进行比较,要么将 "voto" 转换为 INT 并得到与数字上的字面量相比。在这两种情况下,您都强制处理器执行强制转换,在第一种情况下,程序可能无法正常工作: 按字母顺序,这将是一个正确的顺序: 1 11 111 2 222 23 这里有 2 个结果大于 11 和 111,23 个结果大于 222。
这种比较不是总是导致 VOTO 被转换为 INT,而不是相反吗?而且,如果文字被转换为 UNISGNED CHAR,程序不会以同样的方式工作吗?
【问题讨论】:
-
我一个字都听不懂你老师写了什么,你写了什么,但是
voto是一个unsigned char,而%d格式说明符与scanf需要一个@987654326 @。你的编译器应该警告过你。只需将unsigned char voto;替换为int voto;即可。 -
(a) 您的老师是否仅评论了问题中显示的代码版本,准确地说? (b) 在 C 中,文字常量
1或11的类型为int,并且在比较中不会转换为unsigned char,无论其他操作数的类型如何。 -
是的。我使用 %d 所以我可以将一个整数从输入存储到 voto 变量
-
这段代码是你的老师给你的和相关的评论,还是你提交的这段代码和老师对你写的评论的评论?
-
第二个。