2010-02-25 111 views
5

我有一個程序需要用戶輸入,用戶輸入數字1-8來確定如何對一些數據進行排序,但如果用戶剛剛輸入,則執行不同的功能。我得到了如何做到這一點的總體思路,我認爲我的工作很好,但是當用戶剛剛敲入回車鍵時,我遇到了一些問題。目前,我的代碼如下:C - 讀取用戶輸入

//User input needed for sorting.  
fputs("Enter an option (1-8 or Return): ", stdout); 
fflush(stdout); 
fgets(input, sizeof input, stdin); 

printf("%s entered\n", input); //DEBUGGING PURPOSES 

//If no option was entered: 
if(input == "\n") 
{ 
    printf("Performing alternate function."); 
} 
//An option was entered. 
else 
{ 
    //Convert input string to an integer value to compare in switch statment. 
    sscanf(input, "%d", &option); 

    //Determine how data will be sorted based on option entered. 
    switch(option) 
    { 
     case 1: 
     printf("Option 1.\n"); 
     break; 

     case 2: 
     printf("Option 2.\n"); 
     break; 

     case 3: 
     printf("Option 3.\n"); 
     break; 

     case 4: 
     printf("Option 4.\n"); 
     break; 

     case 5: 
     printf("Option 5.\n"); 
     break; 

     case 6: 
     printf("Option 6.\n"); 
     break; 

     case 7: 
     printf("Option 7.\n"); 
     break; 

     case 8: 
     printf("Option 8.\n"); 
     break; 

     default: 
     printf("Error! Invalid option selected!\n"); 
     break; 
    } 
} 

現在我已經改變了if語句來嘗試輸入==「」,輸入==「」,並輸入==「\ n」,但這些都不似乎工作。任何建議將不勝感激。目前從我可以看到的,最初的if語句失敗,代碼跳轉到else部分,然後打印默認情況。

只是要清楚,我宣佈這個代碼的變量如下:

char input[2];   //Used to read user input. 
int option = 0;   //Convert user input to an integer (Used in switch statement). 

回答

8

問題在於如何進行字符串比較(if (input == "\n"))。 C沒有「原生」字符串類型,因此要比較字符串,您需要使用strcmp()而不是==。或者,您可以將其與輸入的第一個字符進行比較:if (input[0] == '\n') ...。由於您是在比較char而不是字符串,所以比較不需要函數。

+0

謝謝!每個人的建議似乎都有效,但是這澄清了我什麼時候應該使用一個。 – oJM86o 2010-02-25 01:16:02

1

你需要從sscanf捕獲返回代碼,它會告訴你有多少場都「分配」,這在「Enter」鍵的情況下,返回碼爲0

編輯: 比較字符串時,應該使用strcmp而不是運算符「==」。

0

問題是與字符串,你是比較指針,即內存地址。由於輸入和"\n"不完全相同的內存,它總是失敗(我假設輸入是char *)。由於您正在尋找單個字符,因此您可以取消引用input並將其與使用單引號而不是double的char進行比較。

(*input == '\n') 

應該按照你的意圖工作。

1

嘗試:

輸入[0] == '\ n'

(或*輸入== '\ n')

1

你需要使用單引號,而不是雙引號

if(input == "\n") 

輸入地址進行比較字符串「\ n」的地址,

你想要做什麼是輸入緩衝 的第一個字符用單引號周圍比較的字符文字\ n這樣

if(input[0] == '\n') 

注意「\ n」

2

嘗試:

#include <string.h> 

頂部和

if(strcmp(input, "\n") == 0) 

如果您的位置if (input == ...)

基本上,你必須在C中使用字符串比較函數,你不能使用比較運算符。