Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.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
简单选项菜单(C)_C - Fatal编程技术网

简单选项菜单(C)

简单选项菜单(C),c,C,我试图创建一个简单的选项菜单,它在do-while循环中执行。菜单有5个不同的选项。我目前正在尝试测试get initial选项,但当我选择案例“b”时,该函数甚至不会执行,选项菜单再次出现 #include "mathprogram.h" int main (void) { char menu_option,initials; int difficulty; printf(" EDUCATIONAL MATH PROGRAM!!!\n");

我试图创建一个简单的选项菜单,它在do-while循环中执行。菜单有5个不同的选项。我目前正在尝试测试get initial选项,但当我选择案例“b”时,该函数甚至不会执行,选项菜单再次出现

#include "mathprogram.h"


int main (void)
{
    char menu_option,initials;
    int difficulty;

    printf("        EDUCATIONAL MATH PROGRAM!!!\n");
    printf("------------------------------------------\n\n");


    do{
    printf("Main Menu\n");
    printf("a. Learn about how to use program.\n");
    printf("b. Enter your initials (3 individual letters).\n");
    printf("c. Difficulty Selection.\n");
    printf("d. Start a new sequence of problems.\n");
    printf("e. Save and quit.\n");
    printf(" Please enter an option from the main menu: ");
    scanf("%c",&menu_option);



    switch(menu_option){

    case 'a':
        //Learn_to_use();

        break;
    case 'b':
        initials=get_intials();

        break;
    case'c':
        printf("case c");
        //difficulty = get_difficulty();
        break;
    case'd':
        break;
    case'e':
        break;
    default:
        printf("invalid input");
            break;
    }

    }while(menu_option !='e');







    }
获取初始值函数:

#include "mathprogram.h"

char get_intials(void){
    char initails;
    printf("Please Enter Initials: ");
    scanf("%c",&initails);
    return initails;

}

选项“b”和首字母char之间有一个“\n”,必须由“scanf”处理。 完整的工作代码:

#include <stdio.h>
char get_intials(void){
    char initails;
    printf("Please Enter Initials: ");
    scanf("\n%c",&initails) ;
    return initails;
}

int main (void)
{
    char menu_option,initials;
    int difficulty;

    printf("        EDUCATIONAL MATH PROGRAM!!!\n");
    printf("------------------------------------------\n\n");


    do{
    printf("Main Menu\n");
    printf("a. Learn about how to use program.\n");
    printf("b. Enter your initials (3 individual letters).\n");
    printf("c. Difficulty Selection.\n");
    printf("d. Start a new sequence of problems.\n");
    printf("e. Save and quit.\n");
    printf(" Please enter an option from the main menu: ");
    scanf("%c",&menu_option);

    switch(menu_option){

    case 'a':
        //Learn_to_use();

        break;
    case 'b':
        initials=get_intials();
        printf( "input initials:%c\n", initials) ;
        break;
    case'c':
        printf("case c");
        //difficulty = get_difficulty();
        break;
    case'd':
        break;
    case'e':
        break;
    default:
        printf("invalid input");
            break;
    }

    }while(menu_option !='e');
}
将换行保留在缓冲区或流中

试着把它改成

scanf(" %c", &var);
它应该按预期工作(注意%前面的空格;这会占用空格,以便下一个scanf调用可以工作)

但是,程序中定义的首字母仅由一个字符组成,而不是三个字符。我将让您自行设计,这是一个不同的问题。

/*
/*
This code includes a stray \n from previous input due to which get_initials method was not working properly,it picked up the remanant \n in the input stream and concluded,
flushing the input stream is the solution to the problem, uncomment the code at line 8 to get proper functionality
*/
#include <stdio.h>
char get_intials(void){
    char initails;
    //fflush(stdin);
    printf("Please Enter Initials: ");
    scanf("%c",&initails);
    return initails;

}

int main (void)
{
    char menu_option,initials;
    int difficulty;

    printf("        EDUCATIONAL MATH PROGRAM!!!\n");
    printf("------------------------------------------\n\n");


    do{
    printf("Main Menu\n");
    printf("a. Learn about how to use program.\n");
    printf("b. Enter your initials (3 individual letters).\n");
    printf("c. Difficulty Selection.\n");
    printf("d. Start a new sequence of problems.\n");
    printf("e. Save and quit.\n");
    printf(" Please enter an option from the main menu: ");
    fflush(stdin);
    scanf("%c",&menu_option);



    switch(menu_option){

    case 'a':
        //Learn_to_use();

        break;
    case 'b':
        initials=get_intials();
        if(initials == '\n')
            printf("\n%s\n","I was there in stream as newline");
        //printf("\n%c",initials);
        break;
    case'c':
        printf("case c");
        //difficulty = get_difficulty();
        break;
    case'd':
        break;
    case'e':
        break;
    default:
        printf("invalid input");
            break;
    }

    }while(menu_option !='e');






return 0;
    }
此代码包含来自上一次输入的\n杂散信息,由于该杂散信息导致get\u initials方法无法正常工作,它在输入流中拾取剩余\n并得出结论, 刷新输入流是问题的解决方案,请取消第8行的代码注释以获得适当的功能 */ #包括 字符获取初始值(无效){ 字符起始; //fflush(stdin); printf(“请输入首字母:”); scanf(“%c”、&initails); 返回初始邮件; } 内部主(空) { char menu_选项,首字母缩写; 智力困难; printf(“教育数学计划!!!\n”); printf(“--------------------------------------\n\n”); 做{ printf(“主菜单”); printf(“a.了解如何使用程序。\n”); printf(“b.输入您的首字母缩写(3个字母)。\n”); printf(“c.难度选择。\n”); printf(“d.开始新的问题序列。\n”); printf(“e.保存并退出。\n”); printf(“请从主菜单中输入一个选项:”); fflush(stdin); scanf(“%c”,菜单选项(&U); 开关(菜单选项){ 案例“a”: //学会使用(); 打破 案例“b”: 缩写=get_initials(); 如果(首字母=='\n') printf(“\n%s\n”,“我作为新行出现在流中”); //printf(“\n%c”,缩写); 打破 案例c: printf(“案例c”); //难度=获得难度(); 打破 案例d': 打破 案例“e”: 打破 违约: printf(“无效输入”); 打破 } }while(菜单选项!='e'); 返回0; }
适合我。当我输入
c
时,它会打印出
案例c
。它确实会打印菜单两次,一次是“c”,一次是“n”。是的,我也注意到了,我不希望它打印两次。但是我主要关心的是为什么我的案例b不起作用这对在菜单中按b没有帮助选项仍然不允许我执行get_initials()函数。它将显示printf(“请输入首字母:”);然后在我不输入姓名首字母的情况下返回菜单。好的,我想可能有一些环境差异。我做了一些修改,粘贴了完整的代码。请检查。问题是我希望我的姓名首字母有三个字符,我在“TMI”中输入。菜单也会打印两个字符,但“char”和“%c”只需一个字符。你想一次输入“TMI”还是单独输入?是的,我现在明白了,但你知道为什么我的菜单在输入初始值后会打印两次吗?谢谢,这有助于菜单不会重复多次。关于这三个字符的字符串,我知道我必须对char变量中的数组做些什么
scanf(" %c", &var);
/*
This code includes a stray \n from previous input due to which get_initials method was not working properly,it picked up the remanant \n in the input stream and concluded,
flushing the input stream is the solution to the problem, uncomment the code at line 8 to get proper functionality
*/
#include <stdio.h>
char get_intials(void){
    char initails;
    //fflush(stdin);
    printf("Please Enter Initials: ");
    scanf("%c",&initails);
    return initails;

}

int main (void)
{
    char menu_option,initials;
    int difficulty;

    printf("        EDUCATIONAL MATH PROGRAM!!!\n");
    printf("------------------------------------------\n\n");


    do{
    printf("Main Menu\n");
    printf("a. Learn about how to use program.\n");
    printf("b. Enter your initials (3 individual letters).\n");
    printf("c. Difficulty Selection.\n");
    printf("d. Start a new sequence of problems.\n");
    printf("e. Save and quit.\n");
    printf(" Please enter an option from the main menu: ");
    fflush(stdin);
    scanf("%c",&menu_option);



    switch(menu_option){

    case 'a':
        //Learn_to_use();

        break;
    case 'b':
        initials=get_intials();
        if(initials == '\n')
            printf("\n%s\n","I was there in stream as newline");
        //printf("\n%c",initials);
        break;
    case'c':
        printf("case c");
        //difficulty = get_difficulty();
        break;
    case'd':
        break;
    case'e':
        break;
    default:
        printf("invalid input");
            break;
    }

    }while(menu_option !='e');






return 0;
    }