程序突然结束,同时在C中的循环中放入开关盒

问题描述 投票:1回答:2

我有此节目显示,这使我可以显示具有3个选择的菜单。如果您选择除出口(0)以外的任何内容,程序将继续循环。

但是,当我尝试从switch语句内部调用函数时,一旦函数完成,则循环完全存在。我要返回菜单并继续,除非我选择退出。

程序正常运行,没有调用函数。如果我选择2,三角形也会起作用,然后它会停留在循环中。

为什么会这样,我该如何解决,

非常感谢。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int rows;

void xmasTree(void)
{ 
 printf("Enter Rows:\n>");
 scanf("%d",&rows);
}

int main (int argc, char ** argv)
{
    int flag = 1;
    while (flag)
    {
        //Print menu
        printf("1: Create xmas tree\n");
        printf("2: Create triangle\n");
        printf("0: exit\n");
        printf("Enter choice :");
        //read input
        char buffer[10];
        fgets(buffer, 10, stdin);
        //convert to number
        int number = atoi (buffer);

        //work on input
        switch (number)
        {
            case 1:
                printf("Building your xmas tree\n");
                xmasTree();
                break;
            case 2:
                printf("creating your triangle\n");
                break;
            case 0:
                printf("Exiting...\n");
                flag = 0;
                break;
            default:
                printf("INVAID INPUT\n");
                break;
        }
    }   
    return 0;
}   
c function while-loop switch-statement
2个回答
2
投票
scanf("%d",&rows);

您从stdin中读取了一个数字,但

将尾随换行符留在了流中!

然后,在下一个循环迭代中

fgets(buffer, 10, stdin);

读取(空)行和

int number = atoi (buffer);

number设置为0,导致程序退出。

一种可能的解决方法是,像使用rows一样读取fgets()atoi()

1
投票
© www.soinside.com 2019 - 2024. All rights reserved.