假设我有一个变量:阅读数在C
char variableName[256];
我如何可以存储在命令行中输入,如果我给号码列表像10 11 12
..等我使用
fgets(variableName, sizeof(variableName), stdin)
及其将其直接插入(1,0,1,1,
等)而不是在空间之间的转换(10, 11, 12,
等)。
我是否应该使用scanf
,并基于空白存储;只是不确定的语法/什么是常见的?
谢谢你们!
假设我有一个变量:阅读数在C
char variableName[256];
我如何可以存储在命令行中输入,如果我给号码列表像10 11 12
..等我使用
fgets(variableName, sizeof(variableName), stdin)
及其将其直接插入(1,0,1,1,
等)而不是在空间之间的转换(10, 11, 12,
等)。
我是否应该使用scanf
,并基于空白存储;只是不确定的语法/什么是常见的?
谢谢你们!
您不必调用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);
如果你知道有多少个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
之间跳转到该转换为数字
即时通讯使用这个,只是得到一个核心转储;感谢您的建议,但! – ShaiwanGhazazani 2014-10-06 16:06:46
哪一个,'strtok'或'sscanf'? – 2014-10-06 16:18:03
哦,是的,我忘了'&'哑巴错误,现在尝试 – 2014-10-06 16:19:07
如果您收到的命令行值,那么你可以简单地通过使用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;
}
'fgets'不会删除空白。你能举一些例子代码和你的输入吗? – mafso 2014-10-06 15:55:50
“* ...将其直接转换为(1,0,1,1等)... *”请详细说明这一点。只有1秒和0秒?它用逗号代替空格? – alk 2014-10-06 16:07:58
hey alk!所以如果我输入30,4,10的字符variableName [256];将它存储为(3,0,4,1,0),所以它不仅存储1和0。什么即时通讯试图使它存储(30,4,10)。谢谢! – ShaiwanGhazazani 2014-10-06 16:17:02