我是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),但都不起作用.我也try 了fgets()次,但没有取得任何进展.

编辑:

功能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.

C++相关问答推荐

C中的整字母后缀i是什么

命名信号量不会像进程之间同步中假设的那样工作

有效地计算由一组点构成的等边三角形和等腰三角形的数量

intellisense不工作,甚至已经下载了c/c++扩展

了解一些CLIPS原语数据类型

为什么在C中进行大量的位移位?

无法用C++编译我的单元测试

在一个小型玩具项目中实现终端历史记录功能

ATmega328P EEPROM未写入

正确的TCP/IP数据包 struct

Rust FFI--如何用给出返回引用的迭代器包装C风格的迭代器?

非正规化边缘毛刺

如何只获取字符串的第一个单词,然后将其与c中的另一个单词进行比较?

运行时错误:在索引数组时加载类型为';char';`的空指针

链接器脚本和C程序使用相同的头文件,这可能吗?

从BIOS(8086)中读取刻度需要多少?

unions 的原子成员是个好主意吗?

无算术运算符和循环的二进制乘法

clion.我无法理解 Clion 中发生的 scanf 错误

返回指向函数内声明的复合文字的指针是否安全,还是应该使用 malloc?