从c中的命令行读取数字

时间:2014-10-06 15:51:04

标签: c command-line integer

假设我有一个变量:

char variableName[256];

如果给出10 11 12等数字列表,我如何存储来自命令行的输入。我正在使用

fgets(variableName, sizeof(variableName), stdin)

并将其直接转换为(1,0,1,1,等),而不是将空格转换为(10, 11, 12,等)。

我是否应该使用scanf,并根据空白存储;只是不确定语法/什么是常见的?

谢谢你们!

3 个答案:

答案 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);

http://linux.die.net/man/3/sscanf

答案 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)

如果您从命令行获取值,那么您只需使用argcargvstrtol来完成工作。无需创建新变量!

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;
}