编程新手 - C - 菜单系统中的失败问题
Programming Novice - C - Issue with Fall-through in Menu System
我最近开始学习 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。
if (y == 3)
goto start;
else {
printf ("Please enter a valid selection.\n");
goto x_one;
这就是循环备份的地方。如果 y 等于 3 则开始,如果 y 不等于 3 则返回开始。
所以基本上就是说无论如何都要回到开始。
请记住,即使在您输入 Z 后,它也会执行。除非您重定向代码,否则它会继续运行。
您可能会收到关于您的编程形式的评论,我认为这对新手来说很好,随着时间的推移,您会学得更好 and/or 在被烧毁之后。
我最近开始学习 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。
if (y == 3)
goto start;
else {
printf ("Please enter a valid selection.\n");
goto x_one;
这就是循环备份的地方。如果 y 等于 3 则开始,如果 y 不等于 3 则返回开始。
所以基本上就是说无论如何都要回到开始。
请记住,即使在您输入 Z 后,它也会执行。除非您重定向代码,否则它会继续运行。
您可能会收到关于您的编程形式的评论,我认为这对新手来说很好,随着时间的推移,您会学得更好 and/or 在被烧毁之后。