2011-04-30 112 views
0

我有一個接受來自命令行的輸入的程序。儘管所有可用命令都是一個字符串,但其中一些命令需要輔助字符串才能進一步定義該操作。只讀一個或兩個字符串

例如「end」是一個命令,「add foo」是第二個。

我的代碼可以很好地處理2個字符串輸入,但是當我嘗試訪問單個字符串命令(如「結束」)時,程序會等待更多輸入而不是立即執行。

有沒有什麼方法可以讓程序在一行(最多可以有兩個字符串)中讀取,而不是現在的方式?

這裏就是它的當前實現:

while(1) 
    { 
     scanf("%s%s", commandString,floorPath); 

      if(!strcmp(commandString,"end") return; 
      //I've got several of these as an "if/else", but there's no 
      //need to reprint them here. 

    } 

回答

3

獨自閱讀的第一個字符串,並根據輸入決定是否有必要讀另一個字符串或沒有。

while(1) 
{ 
    scanf("%s", commandString); 
    if (requiresAnotherString(commandString)) 
    { 
     scanf("%s", floorPath); 
     // handle two string command 
    } 
    else 
    { 
     // handle one string command 
    } 
} 
+0

啊。這應該工作。 – 2011-04-30 02:03:48

+0

總是指定緩衝區大小。 'scanf(「%s」)'和'gets'一樣糟糕。 – Potatoswatter 2011-04-30 03:35:10

1

MByD說什麼,或者讀一個單一的線,然後分別從scanf()解析您的閱讀,看看它是否是一個字的命令或雙字命令,並採取適當的行動路線。

0

這裏是一個另類:

int cmdFromStdin (char **cmd) { 
    int count = 0, nBytes = 0; 
    char *word, inline[BUFSIZ]; 

    if (nBytes = getline (inline, BUSIZ, STDIN)) < 0) 
     return nBytes; 
    for (word = strtok (inline, " ") ; word != NULL ; 
        word = strtok (NULL, " ")) 
     cmd[count++] = word; 
    return count; 
} 

這已經有一段時間,因爲我用C有編碼,但我記得有scanf函數有問題(所以我用函數getline())。 strtok函數將解析出字符串,返回時可以檢查是否成功並在數組cmd上工作。我相信你必須爲此包含stdio.h,stdlib.h和string.h。我的C有點生疏,所以請原諒語法錯誤。

相關問題