好的,所以fgets从文件重定向输入中读取行,然后使用这些行来评估switch语句
我试图测试案例'1'然而它不起作用。
这是我的输出:
DATA SET ANALYSIS
1. Show all the data
2. Calculate the average for an experiment
3. Calculate the average across all experiments
4. Quit
Selection: 1
有谁理解为什么我的switch语句都没有运行?显然var
等于1,因此切换应该至少打印HELLO
,但它什么都不做。帮助
while(fgets(str,100,stdin) != NULL && (strcmp(str,"4") && strcmp(str,"4\n")))
{
var = atoi(str);
printf("DATA SET ANALYSIS\n1.\tShow all the data\n2.\tCalculate the average for an experiment\n3.\tCalculate the average across all experiments\n4.\tQuit\nSelection: %d\n",var);
switch(var)
{
case '1' :
printf("HELLO\n");
for(j=0;j<i;j++)
{
printf("%s",experiments[j]);
for(k=0;k<10;k++)
{
printf("%d ",data[j][k]);
}
printf("\n");
}
break;
}
}
答案 0 :(得分:2)
case '1' :
'1'
是字符1(ASCII 49),而不是整数1,将其更改为:
case 1 :
请注意,'1'
等字符文字在C中的类型为int
,因此语法正确,但不是您期望的行为。
答案 1 :(得分:1)
(int) var
与ascii'1'进行比较
var = atoi(str);
printf("DATA SET ANALYSIS\n1.\tShow all the data\n2.\tCalculate the average for an experiment\n3.\tCalculate the average across all experiments\n4.\tQuit\nSelection: %d\n",var);
switch(var)
{
case '1' :
将您的案例更改为
case 1:
字符'1'的ascii值为49.执行case '1'
时,您实际上正在处理
case 49: