我有一个用C编写的代码,我需要用户在菜单中选择4种不同的选项。 我的代码如下所示:
while(t!=0)
{
printf("-------------------MENU---------------------------\n");
printf("1. Randomize array.\n");
printf("2. Sort array in ascending order.\n");
printf("3. Print min- and max value.\n");
printf("4. Search for a number in the array.\n");
scanf("%d",&t);
switch(t)
{
case 1:
randomize(array);
print(array);
break;
case 2:
array[ARRAYSIZE]=bubblesort(array,ARRAYSIZE);
break;
case 3:
array[ARRAYSIZE]=max(array,ARRAYSIZE);
break;
case 4:
search(array,ARRAYSIZE);
break;
default:
printf("Wrong input. Please try again!");
}
}
我希望用户在2,3和4之前选择1.我尝试在while循环中使用if语句,如下所示:
while(t!=1)
{
if(!array[ARRAYSIZE])
{
printf("You must choose 1 first!");
}
}
但即便如此,如果我先选择1,我仍然会收到错误消息'你必须先选择1',我猜if语句仍然将数组[ARRAYSIZE]读为空?
我在考虑从函数randomize()返回某种布尔标志,它告诉main()中的if语句是否已经执行了选择1。 我真的被困在这里了。有人有什么建议吗?
答案 0 :(得分:1)
该问题的简单实施示例:
#include <stdio.h>
int main(void) {
int one_is_chosen = 0;
int t = 1;
while(t!=0)
{
printf("menu\n");
if(scanf("%d",&t)!=1)break;
if(!one_is_chosen && (t==2 || t==3 || t==4))
{
puts("You have to choose 1 before choosing 2, 3 or 4.");
}
else
{
switch(t)
{
case 1:
one_is_chosen = 1;
puts("one");
break;
case 2:
puts("two");
break;
case 3:
puts("three");
break;
case 4:
puts("four");
break;
default:
puts("wrong input");
break;
}
}
}
return 0;
}
答案 1 :(得分:1)
您可能希望有一个标记表明数组是否已初始化,而不是检查整个数组。
也许是这样的:
int initialized = 0; // Start out as "false"
switch (t)
{
case 1:
// Initialize array...
initialized = 1;
break;
case 2:
if (!initialized)
{
printf("You need to initialize your array by selecting alternative 1 first.\n");
}
else
{
// Do the actual stuff here...
}
break;
...
}
答案 2 :(得分:0)
非常感谢! 我通过在案例中使用标志和if语句来工作。