简单选项菜单(C)

时间:2015-11-26 02:30:14

标签: c

我正在尝试创建一个在do-while循环中执行的简单选项菜单。菜单有5种不同的选择。我目前正在尝试测试get初始选项但是当我选择案例'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;

}

3 个答案:

答案 0 :(得分:1)

选项'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');
}

输出:

Please enter an option from the main menu: b
Please Enter Initials: c
input initials:c

答案 1 :(得分:1)

scanf("%c", &var);

将换行符保留在缓冲区或流中。

尝试将其更改为

scanf(" %c", &var);

它应该按预期工作(注意之前的空格;这会占用空格,以便下一个scanf调用可以工作)。

但是,程序中定义的首字母只包含一个字符,而不是三个字符。我会把这个留给你来设计,这是一个不同的问题。

答案 2 :(得分:-1)

/*
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;
    }