Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
给我一个无限循环的代码 #包括 无效加载菜单(无效); 内部主(空) { 加载菜单(); 返回0; } 无效加载菜单(无效) { 智力选择; 再次使用int; 做 { printf(“菜单\n\n”); printf(“请输入您的选择:\n”); printf(“1.\n”); printf(“2.\n”); printf(“3.\n”); printf(“4.退出\n”); if(scanf(“%d”,&choice)==1) { 开关(选择) { 案例1: 打破 案例2: 打破 案例3: 打破 案例4:printf(“退出计划!\n”); 打破 默认值:printf(“无效选择!请重试\n”); printf(“\n”); 打破 } } 其他的 { printf(“字符无效,请输入数字:\n”); if(scanf(“%d”,&loopreach)==1) 加载菜单(); } }而((选择!=4)); }_C - Fatal编程技术网

给我一个无限循环的代码 #包括 无效加载菜单(无效); 内部主(空) { 加载菜单(); 返回0; } 无效加载菜单(无效) { 智力选择; 再次使用int; 做 { printf(“菜单\n\n”); printf(“请输入您的选择:\n”); printf(“1.\n”); printf(“2.\n”); printf(“3.\n”); printf(“4.退出\n”); if(scanf(“%d”,&choice)==1) { 开关(选择) { 案例1: 打破 案例2: 打破 案例3: 打破 案例4:printf(“退出计划!\n”); 打破 默认值:printf(“无效选择!请重试\n”); printf(“\n”); 打破 } } 其他的 { printf(“字符无效,请输入数字:\n”); if(scanf(“%d”,&loopreach)==1) 加载菜单(); } }而((选择!=4)); }

给我一个无限循环的代码 #包括 无效加载菜单(无效); 内部主(空) { 加载菜单(); 返回0; } 无效加载菜单(无效) { 智力选择; 再次使用int; 做 { printf(“菜单\n\n”); printf(“请输入您的选择:\n”); printf(“1.\n”); printf(“2.\n”); printf(“3.\n”); printf(“4.退出\n”); if(scanf(“%d”,&choice)==1) { 开关(选择) { 案例1: 打破 案例2: 打破 案例3: 打破 案例4:printf(“退出计划!\n”); 打破 默认值:printf(“无效选择!请重试\n”); printf(“\n”); 打破 } } 其他的 { printf(“字符无效,请输入数字:\n”); if(scanf(“%d”,&loopreach)==1) 加载菜单(); } }而((选择!=4)); },c,C,为什么当我输入一个字符时,这仍然会给我一个无限循环?它是一个菜单(case语句仍然需要填充),但我正在处理if语句输入的字符,但它似乎仍然不起作用。谢谢如果字符输入无效,则新调用的load_menu()中的循环将与其调用者中的循环不同。完全不要重复: #include <stdio.h> void load_menu(void); int main(void) { load_menu(); return 0; } void load_menu(void) { in

为什么当我输入一个字符时,这仍然会给我一个无限循环?它是一个菜单(case语句仍然需要填充),但我正在处理if语句输入的字符,但它似乎仍然不起作用。谢谢

如果字符输入无效,则新调用的
load_menu()
中的
循环将与其调用者中的循环不同。完全不要重复:

#include <stdio.h>
void load_menu(void);

int main(void)
{
    load_menu();
    return 0;
}

void load_menu(void)
{
int choice;
int loopagain;

do
{
    printf("Menu \n\n");
    printf("Please enter your choice: \n");
    printf("1. \n");
    printf("2.\n");
    printf("3.\n");
    printf("4. Exit\n");
    if (scanf("%d",&choice)==1)
    {

        switch(choice)
        {
            case 1:
                    break;
            case 2:
                    break;
            case 3:
                    break;
            case 4: printf("Quitting program!\n");
                    break;
            default: printf("Invalid choice! Please try again\n");
                    printf("\n");
                break;
        }
    }

    else
    {
        printf("Characters are invalid, please enter a number: \n ");
        if (scanf("%d",&loopagain)==1)
            load_menu();
    }

}while((choice !=4));
}

如果字符输入无效,则新调用的
load_menu()
中的
循环将与其调用者中的循环不同。完全不要重复:

#include <stdio.h>
void load_menu(void);

int main(void)
{
    load_menu();
    return 0;
}

void load_menu(void)
{
int choice;
int loopagain;

do
{
    printf("Menu \n\n");
    printf("Please enter your choice: \n");
    printf("1. \n");
    printf("2.\n");
    printf("3.\n");
    printf("4. Exit\n");
    if (scanf("%d",&choice)==1)
    {

        switch(choice)
        {
            case 1:
                    break;
            case 2:
                    break;
            case 3:
                    break;
            case 4: printf("Quitting program!\n");
                    break;
            default: printf("Invalid choice! Please try again\n");
                    printf("\n");
                break;
        }
    }

    else
    {
        printf("Characters are invalid, please enter a number: \n ");
        if (scanf("%d",&loopagain)==1)
            load_menu();
    }

}while((choice !=4));
}

输入内容后,输入缓冲区不是数字,因此不被
scanf(“%d”,&choice)接受。
不会刷新输入缓冲区。我相信在处理不可接受的输入时,您应该能够通过调用
fflush(stdin)
来解决这个问题。更好的是,您可能会更好地在每次调用scanf之后刷新输入缓冲区


在我看来,你对错误输入的处理毫无意义。我认为,它应该更像您的
默认值:
案例。正如其他人所说,递归调用没有意义,当您准备返回显示菜单并再次获取用户输入时,再次调用scanf进行输入也没有意义。

在您输入某个内容后,该内容不是数字,因此scanf(“%d”,&choice)不接受。
输入缓冲区不会被刷新。我相信在处理不可接受的输入时,您应该能够通过调用
fflush(stdin)
来解决这个问题。更好的是,您可能会更好地在每次调用scanf之后刷新输入缓冲区


在我看来,你对错误输入的处理毫无意义。我认为,它应该更像您的
默认值:
案例。正如其他人所说的那样,递归调用没有意义,当您准备返回显示菜单并再次获取用户输入时,再次调用scanf进行输入也没有意义。

我相信,除了目前发现的问题之外,有问题的“字母”卡在输入缓冲区中。当用scanf读取一个数字时,当它碰到任何非白板或非数字时,它就会停止。因此,如果缓冲区包含“a\n”,并且我们调用
scanf(“%d”,…)
,那么scanf将立即返回,并将继续这样做,直到提供的“a”从缓冲区中删除为止

我们需要的是一个小循环,从输入缓冲区中删除令人讨厌的“垃圾”

这是之前提出的问题(尽管冲洗的原因略有不同,但解决方案是相同的):

我认为,除了目前发现的问题之外,还有一个问题,那就是违规的“字母”卡在了输入缓冲区中。当用scanf读取一个数字时,当它碰到任何非白板或非数字时,它就会停止。因此,如果缓冲区包含“a\n”,并且我们调用
scanf(“%d”,…)
,那么scanf将立即返回,并将继续这样做,直到提供的“a”从缓冲区中删除为止

我们需要的是一个小循环,从输入缓冲区中删除令人讨厌的“垃圾”

这是之前提出的问题(尽管冲洗的原因略有不同,但解决方案是相同的):

我认为您的问题在于循环变量。根据名称,您将此变量视为循环与否的标志,以及管理第二个循环的方式。由于您是从标准文本(scanf)中读取它,您将失去对它的控制。 因为您的实现中已经有一个scanf,而且它是一个循环,所以您不需要递归调用,您可以始终使用相同的scanf,以正确的方式使用loopreach变量/标志。 更好的是,通过这种方式,没有字符的整数值是4(它永远不会通过scanf测试,值为1,但仍然…),此外EOT(ascii-cntr-D)是一种不常见的字符,您可以将其视为中断程序的另一种方法

一个解决方案是(我猜,根据我的解释):

#包括
无效加载菜单(无效);
内部主(空)
{
加载菜单();
返回0;
}
无效加载菜单(无效)
{
智力选择;
int=1;
做
{
如果(loopreach!=0){/*如果用户输入了一个“坏”数字,则将其设置为不同于0,这样菜单只打印一次*/
printf(“菜单\n\n”);
printf(“请输入您的选择:\n”);
printf(“1.\n”);
printf(“2.\n”);
printf(“3.\n”);
printf(“4.退出\n”);
}
if(scanf(“%d”,&choice)==1)
{
开关(选择)
{
案例1:
打破
案例2:
打破
案例3:
打破
案例4:printf(“退出计划!\n”);
打破
默认值:printf(“无效选择!
 #include <stdio.h>
    void load_menu(void);

    int main(void)
    {
        load_menu();
        return 0;
    }

    void load_menu(void)
    {
    int choice;
    int loopagain = 1;

    do
    {
        if(loopagain != 0){    /*You'll set it to different from 0 if the user entered a 'bad' number so the menu is only printed once*/
           printf("Menu \n\n");
           printf("Please enter your choice: \n");
           printf("1. \n");
           printf("2.\n");
           printf("3.\n");
           printf("4. Exit\n");
        }
        if (scanf("%d",&choice)==1)
        {

            switch(choice)
            {
                case 1:
                        break;
                case 2:
                        break;
                case 3:
                        break;
                case 4: printf("Quitting program!\n");
                        break;
                default:printf("Invalid choice! Please try again\n");
                        loopagain = 0;
                        printf("\n");
                    break;
            }
        }else{
            printf("Characters are invalid, please enter a number: \n ");
            loopagain = 0;
        }

    }while(choice !=4);
 }