C - 新变量中 fgets 的元素

C - Element of fgets in a new variable

我是 C 语言的初学者,我正在尝试在终端 (stdin) 中读取用户的输入。我希望用户能够输入任意数量的数字或字符,直到他按下 ENTER。

我想将第二个值存储在 Int 变量中。

例如用户输入:45 34 RE 34

我正在尝试使用

fgets(input,1024,stdin)

这给了我一个存储在输入中的字符数组,但我需要第一个 space 之后的数字,所以 3 和它后面的数字,4 在一个新变量中。

我知道这看起来很简单,但我做起来有点困难,有没有简单的代码可以做到这一点?

非常感谢!

如果您已经在名为 'input' 的缓冲区中拥有数据,那么按照您的描述很容易解析:

#include <stdio.h>
#include <string.h>
int
main(void)
{
        char input[] = "45 34 RE 34";
        int three = 0;
        int four = 0;
        char *space;

        space = strchr(input, ' ');
        three = space[1] - '0';
        four = space[2] - '0';
        printf("%d:%d\n", three, four);
        return 0;
}

请注意,您可以使用 scanf 来获取值,但是 scanf 对于初学者来说是一个糟糕的工具,您最好使用这样的解决方案来了解正在发生的事情.

如果您不控制输入,您将需要添加边界检查并确保 strchr 找到一个值。

I need the number after the first space, so 3 and the number after it, 4 in a new variable. .... is there an easy code to do that?

sscanf()解析并使用宽度限制

int number1, number2;
//                  vvvvv        Scan non-space characters and discard 
//                          vvv  Scan 1 digit int 
if (sscanf(input, "%*[^ ]%1d%1d", &number1, &number2) == 2) {
  printf("Success %d %d\n, number1, number2);
}

更稳健的方法(当第一个字符是 space 时上述方法失败)。

char *space = strchr(input, ' ');
if (space && sscanf(space, "%1d%1d", &number1, &number2) == 2) {
  printf("Success %d %d\n, number1, number2);
}