该程序需要执行直到按下'q'。但是下面我写的代码只执行第一种情况,然后停止执行其他情况。例如:案例1。如果我的输入是p,q,则仅执行p case,而不执行q。 case 2.如果我的输入是g,q,则仅执行g case,而不执行q。
int main()
{
int i,n,cnt;
char value[10]={0,0,0,0,0,0,0,0,0,0};
int index; float values,Max;
int *val;
bool quit=false;
float num[10]={1.500, 2.200, 7.300, 9.200, 7.400, 7.500, -8.000, 1.500, 12.000, 0.000};
for(i=0;i<20;i++)
{
scanf("%c",&value[i]);
if(value[i]=='r')
{
scanf("%d", &index);
scanf(", %3f",&values);
}
if((value[i] =='p')|(value[i] =='q')|(value[i] =='r')|(value[i] =='g')|(value[i] =='s'))
{
cnt++;
}
}
for(i=0;i<cnt;i++)
{
while(!quit)
{
switch(value[i])
{
//printf("Command (p/g/r/s/q):");
case 'p':
{
printf("Command (p/g/r/s/q):");
printValues(&num,10);
return;
}
case 'g':
{
printf("Command (p/g/r/s/q):");
Max= largestElement(&num,10);
printf("Max=%0.3f",Max);
return;
}
case 'r':
{
printf("Command (p/g/r/s/q):");
replaceElement(&num,index,values);
printValues(&num,10);
return;
}
case 's':
{
printf("Command (p/g/r/s/q):");
sortOnValue(&num,10);
printValues(&num,10);
return;
}
case'q':
{
printf("Command (p/g/r/s/q):");
quit= true;
break;
}
default:
{
printf("help");
return;
}
}
}
}
return 0;
}
答案 0 :(得分:0)
这里的问题很少。
for(i=0;i<20;i++)
,您正在访问范围之外,因此您的循环应该是
for(i=0;i<10;i++)
。
您需要在格式字符串中添加' '
才能使用换行符(\n
)。
`scanf(" %c",&value[i]);`
您使用的是|
而不是||
运算符,因此您的if
应该是
if((value[i] =='p')||(value[i] =='q')||(value[i] =='r')||(value[i] =='g')||(value[i] =='s'))
{
cnt++;
}
在切换用例中,您使用的是return
而不是break
。
更改此
case 'p':
{
printf("Command (p/g/r/s/q):");
printValues(&num,10);
return;
}
到
case 'p':
{
printf("Command (p/g/r/s/q):");
printValues(&num,10);
break;
}
在while(!quit)
循环内的for
没用,当在switch case中使用break
语句时,将导致无限循环。因此,请删除while(!quit)
并按如下所示更改for
循环。
for(i=0;i<cnt&&!quit;i++)
旁注::现在是您的好时机 learn-how-to-debug-small-programs
答案 1 :(得分:0)
在大多数case
块中,您可能希望break
而不是return
退出开关。目前,您要从main()
返回并因此退出程序。 break
将控制权转移到开关的末尾,然后您的程序可以继续。
然后case 'q'
块将返回返回值以退出程序。