2014-05-04 167 views
0

我知道這看起來可能是一個很小的問題,但我現在非常困惑。有沒有辦法將用戶的值接受到數組中,而不必每次都輸入?如何在沒有按下的情況下填充陣列輸入for循環

如果接受的值的數量是3,那麼用戶可以輸入值作爲5 25 45並按Enter鍵,並將其作爲三個單獨的值存儲在數組中。

我正在試圖用for循環來做這件事,但它只接受下一個值,一旦我輸入。

+0

請分享您實現迄今爲止你做? –

+1

'if(scanf(「%d%d%d」,&v1,&v2,&v3)!= 3)/ * error * /;'將接受3個類型爲int的值,每個值之間有進入或空格或製表符數。 – pmg

+0

@pmg它會這樣做,但是如果在另一個測試用例中用戶想輸入5個值,那麼呢?每次我都必須硬編碼。 – anshdeb

回答

1

您必須將該行保存爲字符串,然後使用不同的函數對其進行解析(將其分開)。你應該能夠看到如何做到這一點。嘗試谷歌搜索「解析字符串C」或沿着這些線。

編輯:pmg的解決方案要簡單得多,併爲您的目的工作。我會用它。

1

使用strtok

請記住包含string.h。

CharArrayToMatch在這種情況下是來自用戶的輸入字符串。 爲了舉例說吧是「1 2 3 4 5」。

{1}將得到第一個數字-1並使strtok「準備就緒」以讀取字符串的其餘部分。

{2}打印當前令牌 - 將其替換爲您想要執行的任何操作。

{3}只要這不返回NULL,就有更多的令牌要處理。

當我們進入循環時,我們先打印1,然後得到下一個數字:2,把它放到tmp中,然後用其他數字重複這個過程。 5之後,strtok將返回NULL,我們將退出循環。

// We split on spaces and get the pointer to the first token  
char *tmp = strtok(CharArrayToMatch, " "); // {1} 

while (tmp != NULL) { 
    // do whatever action you want to do instead of this - for instance: atoi! 
    printf("%s\n", tmp); // {2} 
    // Get the next token 
    tmp = strtok(NULL, " "); // {3} 
} 

編輯#1:添加了幾條評論。

編輯#2:請注意,這個解決方案實際上處理一個通用數量的輸入。

編輯#3:快速嘗試使其更清晰。

+0

我不太明白這是什麼。你能解釋一下嗎?謝謝 – anshdeb

6

這工作

#include <stdio.h> 

int main(void) { 
    int array[10]; 
    printf("Enter 10 values separated by whitespace (enter, space, tab, ...)\n"); 
    for (int k = 0; k < 10; k++) { 
     if (scanf("%d", array + k) != 1) /* error */; 
    } 
    return 0; 
} 
相關問題