2013-09-23 484 views
2

我需要製作一個程序,要求用戶輸入(直到他們通過鍵入exit終止它)。輸入以逗號分隔(例如:value,value,value)。然後每個單獨的值都需要放入其自己的變量中。獲取用逗號分隔的輸入

實施例:

如果hello,15,bye用戶類型,我需要把hellofirst變量,15second變量,byethird變量。

這是我到目前爲止有:

int main(void) { 
    char input[100]; 
    char first[100]; 
    char second[100]; 
    char third[100]; 

    printf("Enter commands: "); 

    while(fgets(input, 100, stdin)) { 
    if(strncmp("exit", input, 4) == 0) { 
     exit(0); 
    } 

    // missing code 
    } 
} 

我怎麼會用逗號分隔的輸入,並添加值轉化爲自己的變量?

+1

輕微:推薦'fgets(input,sizeof input,stdin)'。 – chux

回答

4

使用sscanf()和掃描臺:

if (sscanf(input, "%99[^,],%99[^,],%99[^,\n]", first, second, third) != 3) 
    ...oops... 

99的出現,因爲字符串被定義爲100,這確保沒有溢出,雖然與輸入線也爲100,溢出是沒有問題的。

兩個掃描集合是%99[^,],它看起來像正則表達式的有限形式;脫字符表示「否定掃描集」,因此字符串與除逗號之外的任何內容匹配。最後是%99[^,\n],它不包括換行符和逗號。

您可以通過在轉換規範之前添加空格來跳過名稱上的前導空格。尾隨的白色空間不容易避免;如果他們有問題,請在轉換成功後將其刪除。