2016-11-28 44 views
2

我建立一個程序,該程序需要讀取來自用戶的命令的形式輸入,例如後「命令12」,其中命令是特定詞和需要被存儲在單獨的變量,數它也需要在其變量中。檢查是否輸入相匹配的字用C

我創建的變量,其中是字需要以匹配命令和int變量用於存儲。

char rule[5] = {'r', 'u', 'l', 'e', '\0'}; 
char command[6]; 
int cmd_num; 

然後用scanf讀取它,然後用strcmp比較它。

scanf("%s %d", &command, &cmd_num); 
if ((strcmp(command, rule)) != 0) 
{ 
    printf("Error.\n"); 
    return 1; 
} 

然而,它不工作,因爲我期望它。我搜索了幾個小時,但我無法找到如何正確存儲此字符串和數字。任何人都可以幫助我理解字符串是如何存儲的?這將幫助我理解爲什麼strcmp不能按我期望的方式工作。

或者有什麼更好的方法來檢查,如果用戶輸入匹配某個單詞?這個數字似乎對我來說是個問題。我試圖玩弄功能,但我無法得出結果。先謝謝你。

回答

2

首先,你可以直接定義rule爲使用字符串雙引號(並避免寫進去,使它成爲一個常量指針):

const char *rule = "rule"; 
char command[6]; 
int cmd_num; 

當您使用scanf,限長閱讀,以避免緩衝區溢出(使用%5s這是陣列減去零終止的最大尺寸),和不通過地址的陣列/指針,因爲scanf已經可以訪問字符串的地址寫入到:

nb_items = scanf("%5s %d", command, &cmd_num); 

注意,您可以知道有多少項目已被掃描(聲明int nb_items;)。例如,如果用戶忘記輸入號碼或輸入一個非數字,你會得到nb_items==1,你就會知道,cmd_num尚未初始化。

這裏的主要問題是您有未定義的行爲試圖將您的scanf的結果存儲在數組地址中。

+0

我試圖使用的scanf(%5秒)的限制,問題是,我有兩個命令,我不知道該用戶將鍵入哪一個,我需要認識到他們兩個不幸的是,他們是不一樣的長度爲 – Pernick

+0

那麼你的命令緩衝區太小了。將其增加到最大的命令長度。不檢查緩衝區可能會導致程序崩潰。 5是最大限制。你不必輸入5個字符。 –

+0

我試過了,但是然後strcmp不起作用,難道不是因爲字符串不相等嗎?可以說我的輸入是'烏鴉12',我有const char * raven =「raven」;當我在這兩個上使用strcmp時,它不起作用,儘管當我打印它們時,它們會打印相同的字符串。 – Pernick

相關問題