2013-08-02 100 views
2

我是C新手,對於如何通過字符數組使用字符串仍然有點困惑。C - 比較字符串文字和字符數組

在我的C程序,我接受來自用戶的命令:

char command[20]; 
scanf("%s",command); 

當然,後來我想弄清楚他們的命令輸入(類似「如果(命令==‘你好’ ),然後做點什麼「)。我知道這在C中是不可能的,因爲我將一個字符串文字與一個字符數組進行比較,但是對它有什麼好的方法呢?我曾嘗試使用strcmp(命令,「你好」),仍然有錯誤。

任何建議,你可以提供將非常感激。謝謝!

+2

究竟是什麼「錯誤」呢? 'strcmp()'是要走的路。 – 2013-08-02 21:33:28

+0

另外,我在代碼中看到的最糟糕的錯誤是使用'scanf()'。完全忘記那個功能。您正在尋找'fgets(command,sizeof command,stdin)'而不是。 – 2013-08-02 21:34:03

+0

(不使用scanf的主要原因是:掃描的次數沒有限制,如果用戶輸入21個字符會怎麼樣?) –

回答

2

當字符串相同時,strcmp返回0。我有使用strcmp比較字符數組與字符串文字的代碼,當它不工作時我非常困惑。事實證明,假設它在字符串相同的情況下返回1是錯誤的!

也許你犯了同樣的錯誤?

+2

事實上,做出假設是編寫程序的不正確方式 - 應該改爲閱讀文檔。 – 2013-08-02 21:37:09

0

當談到C中的字符串時,它通常採用兩種形式:1.字符數組,2.字符指針。大多數時候,它們是可以互換的。例如:

char *cmd_ptr = "command1"; 
char cmd_array[20] = "command2"; 
printf ("cmd1: %s cmd2: %s\n", cmd_ptr, cmd_array); 

用於上述定義中的主要區別在於,爲cmd_ptr你不能改變它的內容,例如爲cmd_ptr[0] = 'a';cmd_array你可以在陣列中的改變的任何元件。

但是你可以做cmd_ptr = cmd_array;然後你可以通過cmd_ptr進行更改,因爲它指向與cmd_array相同的位置。

2

我寫的什麼,我認爲你正在做一個完整的版本:

#include <string.h> 
    void main() 
    { 

     char command[20]; 
     scanf("%s",command); 

     // command and "hello" can be less than, equal or greater than! 
     // thus, strcmp return 3 possible values 
     if (strcmp(command, "hello") == 0) 
     { 
      printf("\nThe user said hello!"); 
     } 

    } 

幾個人評論了關於使用scanf,他們是正確的,只是一個新的程序員在學習開始的地方這東西,所以不覺得太糟糕,我們都在學習...

希望這會有所幫助。

+0

是的,你沒事。問題是我認爲strcmp只是一個布爾函數,實際上它返回3個可能的值。一旦我更熟悉它,我會試着使用fgets。我使用scanf的原因是我需要讀取用戶輸入的命令,直到第一個空格(不是整行,因爲我需要每行讀取兩個命令)。一旦我弄清楚如何通過fgets來控制我正在閱讀的內容,我一定會使用它。感謝fgets的建議,並且非常感謝大家提供的全面解答!你是如此的樂於助人! – Irina

+0

你介意upvoting有用的答案,並選擇一個作爲正確的答案? – gravitas

+0

RSinghS - 我已經嘗試過,但我需要有15個聲望才能答覆答案。一旦我能夠,我一定會提供有用的答案! :) – Irina