c-在输出中没有换行符的情况下,是否可以多次扫描f



我是c的初学者,想让我的代码请求命令,如果输入了"s",它就会收到第二个数字:

void get_command(char *command) {
struct pizzeria *the_pizzeria;
printf("n - new order, s# - select order #, x - exitn");
get_char_input(command, "Command: ", MAX_COMMAND_LENGTH);
}
//....
void process_command(struct pizzeria *the_pizzeria, char *command) {
if (command[0] == 'n') {
struct order **last_next_order_field = get_last_next_order_field(the_pizzeria);
*last_next_order_field = create_order();
}
if (command[0] == 's') {
get_integer_input(&the_pizzeria->selected_order, "");
printf("n n");
}
}
//....
void get_integer_input(int *variable, char *prompt) {

printf(prompt);
scanf("%d", variable);
getchar();
}

我想得到一个结果:Command: s2

然而,我收到:

Command: s 
2

我尝试过使用getchar()fflush(stdnin),但都不起作用。我也尝试过fgets(),但没有取得任何进展。

编辑:

功能get_char_input()


void get_char_input(char *variable, char *prompt, int length) {
printf(prompt);
fgets(variable, length, stdin);
variable[strcspn(variable, "rn")] = 0;
}

注:command是最大长度为16的char变量。

来自以下内容:

printf("n - new order, s# - select order #, x - exitn");
get_char_input(command, "Command: ", MAX_COMMAND_LENGTH);

一个‘假定’command是一个多字符缓冲区;s#";用于输入";s207";(例如(。

这将做你似乎想要的:

if (command[0] == 's') {
the_pizzeria->selected_order = atoi( command + 1 );

您可能需要添加验证,以验证返回的数字是否合理。它可能经常是0。

最新更新