假设我有一个变量:
char variableName[256];
如果给出10 11 12
等数字列表,我如何存储来自命令行的输入。我正在使用
fgets(variableName, sizeof(variableName), stdin)
并将其直接转换为(1,0,1,1,
等),而不是将空格转换为(10, 11, 12,
等)。
我是否应该使用scanf
,并根据空白存储;只是不确定语法/什么是常见的?
谢谢你们!
答案 0 :(得分:-1)
您不必调用fgets或任何其他函数,因为传递给程序的参数位于argv []数组中。您可以直接使用
访问它们int i = atoi( argv[1]);
但更好的是你应该使用提供错误检查的sscanf
:
if ( sscanf ( argv[1], "%d", &i) != 1) { printf ( "error - not an integer"); }
或strtol()
,可以防止/溢出:
char *endptr, *str;
str = argv[1];
long val = strtol( str, &endptr, 10);
答案 1 :(得分:-1)
如果您知道将输入多少个号码,请在使用sscanf
后使用fgets
或直接使用scanf
(不推荐)
int var[NO_OF_INPUTS];
fgets(variableName , sizeof variableName , stdin);
sscanf(variableName , "%d %d %d ... %d" , &var[0] , &var[1] , ... , &var[NO_OF_INPUTS - 1]);
如果您不知道输入的数量,那么您可以通过计算fgets
之后的空格数来计算输入的数量的函数,然后可以使用strtok
来跳转在空格和strtol
之间将其转换为数字
答案 2 :(得分:-1)
如果您从命令行获取值,那么您只需使用argc
,argv
和strtol
来完成工作。无需创建新变量!
argc
包含传递给程序的命令行参数的数量。
argv
是参数数组。
我希望这段代码有用:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int i;
char *p;
long int li_arr[argc];
if (argc==1)
{
puts("No arguments provided");
exit(1);
}
for(i=1;i<argc;i++)
{
li_arr[i] = strtol(argv[i],&p,10);
printf("%ld\n",li_arr[i]);
}
return 0;
}