如果用户在C中的菜单中选择2之前的提示错误消息

时间:2015-09-22 08:41:39

标签: c if-statement menu

我有一个用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。 我真的被困在这里了。有人有什么建议吗?

3 个答案:

答案 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语句来工作。