我知道這看起來可能是一個很小的問題,但我現在非常困惑。有沒有辦法將用戶的值接受到數組中,而不必每次都輸入?如何在沒有按下的情況下填充陣列輸入for循環
如果接受的值的數量是3
,那麼用戶可以輸入值作爲5 25 45
並按Enter鍵,並將其作爲三個單獨的值存儲在數組中。
我正在試圖用for循環來做這件事,但它只接受下一個值,一旦我輸入。
我知道這看起來可能是一個很小的問題,但我現在非常困惑。有沒有辦法將用戶的值接受到數組中,而不必每次都輸入?如何在沒有按下的情況下填充陣列輸入for循環
如果接受的值的數量是3
,那麼用戶可以輸入值作爲5 25 45
並按Enter鍵,並將其作爲三個單獨的值存儲在數組中。
我正在試圖用for循環來做這件事,但它只接受下一個值,一旦我輸入。
您必須將該行保存爲字符串,然後使用不同的函數對其進行解析(將其分開)。你應該能夠看到如何做到這一點。嘗試谷歌搜索「解析字符串C」或沿着這些線。
編輯:pmg的解決方案要簡單得多,併爲您的目的工作。我會用它。
使用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:快速嘗試使其更清晰。
我不太明白這是什麼。你能解釋一下嗎?謝謝 – anshdeb
這工作
#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;
}
請分享您實現迄今爲止你做? –
'if(scanf(「%d%d%d」,&v1,&v2,&v3)!= 3)/ * error * /;'將接受3個類型爲int的值,每個值之間有進入或空格或製表符數。 – pmg
@pmg它會這樣做,但是如果在另一個測試用例中用戶想輸入5個值,那麼呢?每次我都必須硬編碼。 – anshdeb