2014-10-06 99 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; 
}