Sal*_*din 15 c comparison if-statement switch-statement
我正在尝试编写一个有很多比较的代码
Write a program in “QUANT.C” which “quantifies” numbers. Read an integer “x” and test it, producing the following output: x greater than or equal to 1000 print “hugely positive” x from 999 to 100 (including 100) print “very positive” x between 100 and 0 print “positive” x exactly 0 print “zero” x between 0 and -100 print “negative” x from -100 to -999 (including -100) print “very negative” x less than or equal to -1000 print “hugely negative” Thus -10 would print “negative”, -100 “very negative” and 458 “very positive”.
然后我尝试使用开关解决它,但它不起作用,我是否必须使用if语句解决它或有一个方法来解决它使用开关?
#include <stdio.h>
int main(void)
{
int a=0;
printf("please enter a number : \n");
scanf("%i",&a);
switch(a)
{
case (a>1000):
printf("hugely positive");
break;
case (a>=100 && a<999):
printf("very positive");
break;
case (a>=0 && a<100):
printf("positive");
break;
case 0:
printf("zero");
break;
case (a>-100 && a<0):
printf("negative");
break;
case (a<-100 && a>-999):
printf("very negative");
break;
case (a<=-1000):
printf("hugely negative");
break;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
无开关和 if-else-less方法:
#include <stdio.h>
int main(void)
{
int a=0, i;
struct {
int value;
const char *description;
} list[] = {
{ -999, "hugely negative" },
{ -99, "very negative" },
{ 0, "negative" },
{ 1, "zero" },
{ 100, "positive" },
{ 1000, "very positive" },
{ 1001, "hugely positive" }
};
printf("please enter a number : \n");
scanf("%i",&a);
for (i=0; i<6 && a>=list[i].value; i++) ;
printf ("%s\n", list[i].description);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
for循环不包含任何代码(只有一个空语句;),但当输入的值a等于或大于value数组中的元素时,它仍然在数组上运行并返回值.此时,i保存description要打印的索引值.
如果您正在使用gcc,那么您将获得"运气",因为它通过语言扩展支持您想要的内容:
#include <limits.h>
...
switch(a)
{
case 1000 ... INT_MAX: // note: cannot omit the space between 1000 and ...
printf("hugely positive");
break;
case 100 ... 999:
printf("very positive");
break;
...
}
Run Code Online (Sandbox Code Playgroud)
这是非标准的,其他编译器将无法理解您的代码.通常会提到您应该仅使用标准功能("可移植性")编写程序.
所以考虑使用"简化" if-elseif-else结构:
if (a >= 1000)
{
printf("hugely positive");
}
else if (a >= 100)
{
printf("very positive");
}
else if ...
...
else // might put a helpful comment here, like "a <= -1000"
{
printf("hugely negative");
}
Run Code Online (Sandbox Code Playgroud)