C-从用户那里获取特定的输入

标签 c stdin

我需要从用户那里得到一些特定的输入(用户需要输入“init 3 4 NORTH”,3是X的值(int类型),4是Y的值(int类型),NORTH是direction(enum type) init 是他们必须输入的命令。)如果用户只输入“3 4 NORTH”,程序将不会执行任何操作。

我不允许使用任何 scanf 系列来获取输入。

这是我到目前为止实现的:

char input[10];
printf("Enter the command...\n");
if(fgets(input,sizeof(input),stdin)!= NULL){
     if(input[0]=='i' && input[1]=='n' && input[2]=='i' && input[3]=='t'){
        int x=atoi(&input[5]);
        int y=atoi(&input[7]);
         //doing similar things for Direction value.....
       }
     }

所以我的想法是检查第一个值“init”,并获取两个 int 值,获取方向值。 我希望我的解释足够清楚,希望任何人都可以分享他们的想法。

最佳答案

您的方法的一个问题是,如果数字大于 9,它将不起作用。如果您不想使用 scanf你可以阅读带有 fgets 的行然后使用 sscanf提取它的部分。请注意,即使在检查值本身之前,也会检查读数的有效性。

#include <stdio.h>
#include <string.h>

int main(void) {
    char line[256];
    char cmd[32];
    char dir[32];
    int x;
    int y;

    if(fgets(line, sizeof line, stdin) == NULL) {
        return 1;
    }
    if(sscanf(line, "%32s%d%d%32s", cmd, &x, &y , dir) != 4) {
        return 1;
    }

    // now check you got valid command, values, and direction
    if(strcmp(cmd, "init") != 0) {
        return 1;
    }
    if(x < 0 || x > 99 || y < 0 || y > 99) {
        return 1;
    }
    if(strcmp(dir, "NORTH") != 0) {
        return 1;
    }

    printf("Your command: %s %d %d %s\n", cmd, x, y, dir);
    return 0;
}

关于C-从用户那里获取特定的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36397182/

相关文章:

c# - 将图像写入 Process.StandardInput.BaseStream 的更快方法

stdin - 如何使 atom.io 读取 STDIN?

python - 将函数结果写入 stdin

c - 根据其内容从双向链表中删除结构(C 语言)

c - 按位循环遍历大数据 block 的最快方法是什么

c - 在 C 中创建 BITMAP 时初始化程序无效

rust - 在尝试读取STDIN缓冲区之前,是否有Rust方法来检查STDIN缓冲区是否为空?

c++ - 什么是流行的、多平台的、免费的、开源的套接字库

CUDA:具有共享内存和非 block 大小倍数的矩阵大小的平铺矩阵-矩阵乘法

perl - 在 perl 中,如何从 STDIN 读取直到我们找到一个空格或换行符?