我是C语言的初学者,我正在尝试读取终端(stdin(中用户的输入。我希望用户能够输入他想要的任意数量的数字或字符,直到他按下ENTER。
我想把第二个值存储在Int变量中。
例如,用户输入:45 34 RE 34
我正在尝试使用
fgets(input,1024,stdin)
这给了我一个存储在输入中的字符数组,但我需要第一个空格后面的数字,所以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:%dn", three, four);
return 0;
}
请注意,您可以使用scanf
来获取值,但scanf
对于初学者来说是一个糟糕的工具,您最好使用这样的解决方案来了解发生了什么。
如果不控制输入,则需要添加边界检查并确保strchr
找到值。
我需要第一个空格后面的数字,所以3和后面的数字4在一个新变量中。。。。有一个简单的代码可以做到这一点吗?
使用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 %dn, number1, number2);
}
一种更稳健的方法(当第一个字符是空间时,上述方法失败(。
char *space = strchr(input, ' ');
if (space && sscanf(space, "%1d%1d", &number1, &number2) == 2) {
printf("Success %d %dn, number1, number2);
}