我正在为我的菜单使用while
,switch
,case
语句,当它运行时,它一直说输入选项,我知道while(1)
会创建一个无限循环但有没有办法避免这种情况?
while(1)
{
printf("\nEnter Choice \n");
scanf("%d",&i);
switch(i)
{
case 1:
{
printf("Enter value to add to beginning: ");
scanf("%c",&value);
begin(value);
display();
break;
}
case 2:
{
printf("Enter value to add last: ");
scanf("%c",&value);
end(value);
display();
break;
}
case 3:
{
printf("Value to enter before\n");
scanf("%c",&loc);
printf("Enter value to add before\n");
scanf("%c",&value);
before(value,loc);
display();
break;
}
case 4 :
{
display();
break;
}
}
}
任何帮助将不胜感激。
答案 0 :(得分:2)
虽然(1)没问题。但是你必须有一些条件来完成循环。喜欢:
while(1){
.........
if(i == 0)
break;
............
}
在每个“%d”和“%c”的开头添加空格,因为 scanf 始终在缓冲区中留下换行符:
"%d"->" %d"
"%c"->" %c"
答案 1 :(得分:2)
替代解决方案,
int i = !SOME_VALUE;
while(i != SOME_VALUE)
{
printf("\n\nEnter Choice ");
scanf("%d",&i);
switch(i)
{
case SOME_VALUE: break;
.
.
.
// the rest of the switch cases
}
}
SOME_VALUE
是通知停止循环的任何整数。
答案 2 :(得分:1)
或者,您可能希望在与输入相关的循环中放置一个条件,例如
do
{
printf("\n\nEnter Choice ");
scanf("%d",&i);
// the rest of the switch is after this
} while (i != SOME_VALUE);
注意使用do循环,它在读入一个值之后测试最后的条件。
答案 3 :(得分:1)
我可能会写一个可以在循环中调用的函数:
while ((i = prompt_for("Enter choice")) != EOF)
{
switch (i)
{
case ...
}
}
prompt_for()
功能可能是:
int prompt_for(const char *prompt)
{
int choice;
printf("%s: ", prompt);
if (scanf("%d", &choice) != 1)
return EOF;
// Other validation? Non-negative? Is zero allowed? Retries?
return choice;
}
您还可以在以下网址找到相关讨论: