你可以试试这样的。
#include <ncurses.h>
int main()
{
char choice = 0;
int player_number = -1;
initscr ( );
do {
mvprintw ( 1, 1,"a. New name");
mvprintw ( 2, 1,"b. Input number");
mvprintw ( 3, 1,"c. Exit");
mvprintw ( 4, 1," ");
if (( scanw("%c", &choice)) == 1) {//scanw succeeded
if ( ! ( choice == 'a' || choice == 'b' || choice == 'c')) {
mvprintw ( 5, 1,"invalid input, should be a, b or c");
}
else {
mvprintw ( 5, 1," ");
}
}
} while ( ! ( choice == 'c' || choice == 'b'));
mvprintw ( 5, 1," ");
if ( choice == 'b') {
do {
mvprintw ( 7, 1,"Enter number 0-9");
mvprintw ( 8, 1," ");
if (( scanw("%d", &player_number)) == 1) {//scanw succeeded
if ( player_number < 0 || player_number > 9) {
mvprintw ( 9, 1,"invalid input, should be 0-9");
}
}
else {//scanw failed
mvprintw ( 9, 1,"invalid input, should be 0-9");
}
} while ( player_number < 0 || player_number > 9);
}
endwin ( );
return 0;
}
使用 char 数组包含输入并使用getnstr() 读取输入,可以检测到q 的输入以退出程序。对于数字输入,strtol() 用于将数组转换为 int。
#include <stdio.h>
#include <stdlib.h>
#include <ncurses.h>
int main()
{
char choice = 0;
char instr[128] = {0};
int player_number = -1;
initscr ( );
do {
mvprintw ( 1, 1,"a. New name");
mvprintw ( 2, 1,"b. Input number");
mvprintw ( 3, 1,"c. Exit");
mvprintw ( 4, 1," ");
if (( getnstr( instr, 1)) != ERR) {//succeeded
choice = instr[0];
if ( ! ( choice == 'a' || choice == 'b' || choice == 'c')) {
mvprintw ( 5, 1,"invalid input, should be a, b or c");
if ( choice == 'q') {//quit when q is entered
endwin ( );
return 0;
}
}
else {
mvprintw ( 5, 1," ");
}
}
} while ( ! ( choice == 'c' || choice == 'b'));
mvprintw ( 5, 1," ");
if ( choice == 'b') {
do {
mvprintw ( 7, 1,"Enter number 0-9");
mvprintw ( 8, 1," ");
if (( getnstr( instr, sizeof ( instr))) != ERR) {//succeeded
if ( instr[0] == 'q' && instr[1] == '\0') {//quit when q is entered
endwin ( );
return 0;
}
player_number = strtol ( instr, NULL, 10);
if ( player_number < 0 || player_number > 9) {
mvprintw ( 9, 1,"invalid input, should be 0-9");
}
}
else {//failed
mvprintw ( 9, 1,"invalid input, should be 0-9");
}
} while ( player_number < 0 || player_number > 9);
}
endwin ( );
return 0;
}