getchar returns 一个不同的字符
getchar returns a different character
我正在尝试使我已经通过使用函数变得更有条理的程序。它的目的是处理一个菜单,其中包含用于计算不同值的多个选项。此代码用于处理主菜单,我得到的错误是我输入的每个字符都无效(激活开关中的默认大小写),即使它是 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;
}
}
您正在读入一个字符,例如 ,它存储为 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'
我正在尝试使我已经通过使用函数变得更有条理的程序。它的目的是处理一个菜单,其中包含用于计算不同值的多个选项。此代码用于处理主菜单,我得到的错误是我输入的每个字符都无效(激活开关中的默认大小写),即使它是 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;
}
}
您正在读入一个字符,例如 ,它存储为 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'