我试图制作一个程序,我已经通过使用函数使其更有条理。它的目的是处理一个菜单,其中包含几个用于计算不同值的选项。此代码用于处理主菜单,我得到的错误是我输入的每个字符都是无效的(激活交换机中的默认情况),即使它是1,2或3,这是可能的选择。我做错了什么?
void process_main_menu(){
int c;
print_main_menu();
int option=getchar();
while((c=getchar())!='\n' && c!=EOF);
switch(option){
case 1:
program_state=ST_MENU_BASS;
break;
case 2:
program_state=ST_MENU_TREBLE;
break;
case 3:
program_state=ST_EXIT_PROGRAM;
break;
default:
fprintf(stderr, "%s\n", MSG_INVALID_NUMBER);
program_state=ST_MAIN_MENU;
}
}
我正在更新代码,因为我认为它不够完整。我实际上正在使用宏
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#define OPT_MENU_BASS 1
#define OPT_MENU_TREBLE 2
#define OPT_EXIT_PROGRAM 3
typedef enum {
ST_MAIN_MENU,
ST_MENU_BASS,
ST_MENU_TREBLE,
ST_EXIT_PROGRAM,
ST_MENU_TREBLE_FREQ,
ST_MENU_TREBLE_GAIN,
ST_MENU_TREBLE_FREQ_FREQ_TREBLE,
ST_MENU_TREBLE_FREQ_RESISTOR_3,
ST_MENU_TREBLE_FREQ_CAPACITOR_3,
ST_MENU_TREBLE_GAIN_RES5,
ST_MENU_BASS_FREQ,
ST_MENU_BASS_GAIN,
ST_MENU_BASS_FREQ_FREQ_BASS,
ST_MENU_BASS_FREQ_RESISTOR_2,
ST_MENU_BASS_FREQ_CAPACITOR_1,
ST_MENU_BASS_GAIN_RESISTOR_1,
} state_t;
state_t program_state;
void process_main_menu(){
int c;
print_main_menu();
char option=getchar();
while((c=getchar())!='\n' && c!=EOF);
switch(option){
case OPT_MENU_BASS:
program_state=ST_MENU_BASS;
break;
case OPT_MENU_TREBLE:
program_state=ST_MENU_TREBLE;
break;
case OPT_EXIT_PROGRAM:
program_state=ST_EXIT_PROGRAM;
break;
default:
fprintf(stderr, "%s\n", MSG_INVALID_NUMBER);
program_state=ST_MAIN_MENU;
}
}
答案 0 :(得分:4)
您正在读取一个字符,例如存储为ASCII码,而不是数值。
您需要更改案例以查找字符'1'
,而不是数字1
。
case '1':
program_state=ST_MENU_BASS;
break;
case '2':
program_state=ST_MENU_TREBLE;
break;
case '3':
program_state=ST_EXIT_PROGRAM;
break;
编辑:
根据您正在使用的宏,您需要修改宏以代表字符'1'
,'2'
或'3'
而不是数字1
, 2
或3
。
#define OPT_MENU_BASS '1'
#define OPT_MENU_TREBLE '2'
#define OPT_EXIT_PROGRAM '3'