在C中,有没有办法从一行命令行提示中获取多个用户输入?

时间:2016-09-23 05:42:21

标签: c unix

我想知道在C中有没有办法提示用户输入2个不同的值, 然后将这两个值分别存储在一个用户条目中。例如:

Enter your age and blood type : 34 AB

然后我们分别存储两个内容,如

fgets(string,string, 64, 64, stdin);

显然,这不会起作用,但在C中是否有可能。我对C(2天)很新。我知道在Java中你可以使用main和grab命令行条目中定义的args [],其中用户输入中的每个空格都是args数组中的不同元素。

3 个答案:

答案 0 :(得分:8)

args主要用于C语言,但传统名称为argv(参数向量),如int main(int argc, char **argv)

您也可以使用scanf,如scanf("%d %s", &age, blood_type);

处理用户输入时,第三种(通常是推荐的方法)是将输入与分析输入分开,如:

fgets(line, sizeof line, stdin);
sscanf(line, "%d %s", &age, blood_type);

上述代码的更完整版本,并进行错误检查:

char line[100];
int age;
char blood_type[100];
if (fgets(line, sizeof line, stdin) == NULL ||
    sscanf(line, "%d %s", &age, blood_type) != 2) {
    fprintf(stderr, "Couldn't read age and blood type. Sorry.\n");
    exit(EXIT_FAILURE);
}

由于line包含最多99个字符,加上标记字符串结尾的'\ 0',我们无法在变量blood_type中获得溢出。否则,我们可以使用%99s而不是%s来限制可以放入blood_type的字符数。

答案 1 :(得分:0)

目前最好的方法是

char string[100];

if (fgets(string, sizeof(string), stdin) != NULL) {
    // split the string here to extract the "n" values
}

答案 2 :(得分:-1)

另外一个选项(取决于您的环境) - man getopt