2014-10-06 108 views
-3

假设我有一个变量:阅读数在C

char variableName[256]; 

我如何可以存储在命令行中输入,如果我给号码列表像10 11 12 ..等我使用

fgets(variableName, sizeof(variableName), stdin) 

及其将其直接插入(1,0,1,1,等)而不是在空间之间的转换(10, 11, 12,等)。

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

谢谢你们!

+4

'fgets'不会删除空白。你能举一些例子代码和你的输入吗? – mafso 2014-10-06 15:55:50

+1

“* ...将其直接转换为(1,0,1,1等)... *”请详细说明这一点。只有1秒和0秒?它用逗号代替空格? – alk 2014-10-06 16:07:58

+0

hey alk!所以如果我输入30,4,10的字符variableName [256];将它存储为(3,0,4,1,0),所以它不仅存储1和0。什么即时通讯试图使它存储(30,4,10)。谢谢! – ShaiwanGhazazani 2014-10-06 16:17:02

回答

-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

+0

这也是我怀疑OP的意思,但是她如何从'stdin'接收“1,0,1,1等”(不管这是什么)呢? – mafso 2014-10-06 16:12:49

+0

@mafso OP误导性地尝试使用标准输入时,他需要得到的命令行参数是使用argv [] – 4pie0 2014-10-06 16:14:23

+1

'atoi()'和'sscanf(“%d”)'具有未定义的溢出行为。使用'strtol()'。 – potrzebie 2014-10-06 16:39:05

-1

如果你知道有多少个nu mbers将inputed然后使用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之间跳转到该转换为数字

+0

即时通讯使用这个,只是得到一个核心转储;感谢您的建议,但! – ShaiwanGhazazani 2014-10-06 16:06:46

+0

哪一个,'strtok'或'sscanf'? – 2014-10-06 16:18:03

+1

哦,是的,我忘了'&'哑巴错误,现在尝试 – 2014-10-06 16:19:07

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