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);
}
我是 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);
}