我有此节目显示,这使我可以显示具有3个选择的菜单。如果您选择除出口(0)以外的任何内容,程序将继续循环。
但是,当我尝试从switch语句内部调用函数时,一旦函数完成,则循环完全存在。我要返回菜单并继续,除非我选择退出。
程序正常运行,没有调用函数。如果我选择2,三角形也会起作用,然后它会停留在循环中。
为什么会这样,我该如何解决,
非常感谢。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int rows;
void xmasTree(void)
{
printf("Enter Rows:\n>");
scanf("%d",&rows);
}
int main (int argc, char ** argv)
{
int flag = 1;
while (flag)
{
//Print menu
printf("1: Create xmas tree\n");
printf("2: Create triangle\n");
printf("0: exit\n");
printf("Enter choice :");
//read input
char buffer[10];
fgets(buffer, 10, stdin);
//convert to number
int number = atoi (buffer);
//work on input
switch (number)
{
case 1:
printf("Building your xmas tree\n");
xmasTree();
break;
case 2:
printf("creating your triangle\n");
break;
case 0:
printf("Exiting...\n");
flag = 0;
break;
default:
printf("INVAID INPUT\n");
break;
}
}
return 0;
}
scanf("%d",&rows);
您从stdin
中读取了一个数字,但
将尾随换行符留在了流中!然后,在下一个循环迭代中
fgets(buffer, 10, stdin);
读取(空)行和
int number = atoi (buffer);
将
number
设置为0
,导致程序退出。
一种可能的解决方法是,像使用rows
一样读取fgets()
和atoi()
。