繁体   English   中英

是否可以在 output 中没有换行符的情况下多次扫描?

[英]Is it possible to scanf multiple times without a newline in output?

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

void get_command(char *command) {
    struct pizzeria *the_pizzeria;
    printf("n - new order, s# - select order #, x - exit\n");
    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()并没有取得任何进展。

编辑:

Function get_char_input()


void get_char_input(char *variable, char *prompt, int length) {

    printf(prompt);
    fgets(variable, length, stdin);

    variable[strcspn(variable, "\r\n")] = 0;

}

注意: command是一个char变量,最大长度为 16。

从以下:

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

一个“假定”该command是一个多字符缓冲区,并且您提示“s#”输入“s207”(例如)。

这会做你似乎想要的:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM