我最近开始研究C只是为了它的乐趣,我决定开始创建一个菜单系统,但我遇到的问题是我认为是落空的:
#include <stdio.h>
int main (void)
{
int x, y, z;
start:
printf ("Menu 1 -- Please select a number.\n");
printf ("1\n");
printf ("2\n");
printf ("Enter selection: ");
scanf ("%i", &x);
getchar();
if (x == 1) {
x_one:
printf ("1.\n");
printf ("Menu 2 -- Please select a number.\n");
printf ("1\n");
printf ("2\n");
printf ("3 -- Go back.\n");
printf ("Enter selection: ");
scanf ("%i", &y);
getchar();
if (y == 1) {
y_one_one:
printf ("1-1.\n");
printf ("Menu 3 -- Please select a number.\n");
printf ("1\n");
printf ("2\n");
printf ("3 -- Go back.\n");
printf ("Enter selection: ");
scanf ("%i", &z);
getchar();
if (z == 1 || z == 2)
printf ("You selected %i.\n", z);
if (z == 3)
goto x_one;
else if (z > 1 && z < 3)
goto y_one_one;
}
if (y == 2) {
/* mostly the same as "if (y == 1)". */
}
if (y == 3)
goto start;
else {
printf ("Please enter a valid selection.\n");
goto x_one;
}
}
if (x == 2) {
/* Mostly the same as "if (x == 1)". */
}
else if (z > 1 && z < 2)
goto start;
return 0;
}
问题是,一旦我到达第三个菜单,程序将打印出所选号码的字符串,但不是自行终止,它将显示第三个菜单或返回第二个菜单,它将无论我输入什么号码,都要这样做。
我只学习了C大约两个星期,我对嵌套的if
语句的工作原理不太了解,如果可以的话,我可以解释导致这种意外行为的原因以及如何要纠正它,非常感谢,谢谢。
我在Windows 10上通过TDM-GCC-64使用GCC 5.1.0。
答案 0 :(得分:0)
if (y == 3)
goto start;
else {
printf ("Please enter a valid selection.\n");
goto x_one;
这就是它的循环备份。如果y等于3,则开始,如果y不等于3,则返回开始。
所以基本上它的说法无论如何都要重新开始。
请记住,即使您输入Z也会执行此操作。除非您重定向,否则代码会一直停止。
你可能会对你的编程形式发表评论,对于newb来说它很好,你会随着时间的推移和/或在被烧毁后更好地学习。