2014-03-01 26 views
0

好所以基本上我試圖得到一個程序,轉換爲十六進制,我進入到它的等價基數10值,我很確定算法是正確的,我只是不能讓它正確地讀取我輸入什麼,任何幫助是非常感謝:)而且我很抱歉,任何人認爲這是一個非常愚蠢的問題。我如何使用getchar()錯誤?

int main() 
{ 
     char hexalpha[] = "aAbBcCdDeEfF"; 
     int i, c; 
     int answer = 0; 

     c = getchar(); 

     for (i= 0; answer == 0 && hexalpha[i] != "\0"; ++i) 
     { 
      if(hexalpha[i]== c) 
       answer = (10 + (i/2)); 
     } 

    return answer; 
} 
+0

你爲什麼認爲它沒有正確讀取你輸入的內容? – nos

+1

你進入了什麼,當你進入它會發生什麼?你期望發生什麼? – OSborn

+1

如果您的問題是您沒有查看結果,請嘗試打印而不是返回結果。 –

回答

2

你不能!=比較字符串,並hexalpha[i]char。所以,你會希望hexalpha[i] != '\0'代替hexalpha[i] != "\0"

返回從主答案()是一個有點笨拙,印刷出來的答案會更容易些,所以做

printf("Answer: %d\n", answer); 
return 0; 
0

您正在返回answer,不打印它。你的問題不是輸入,而是輸出。返回將值傳遞給稱爲它的任何函數(或者在main的情況下給出退出狀態)。
在你的代碼的開頭,添加以下內容:

#include <stdio.h> 

截至main末,更換return answer;有:

printf("%i\n", answer); 
    return 0; 

另外,我建議你在與'0'更換"0"爲循環。你的編譯器會給你一個警告,因爲它應該是char,而不是*char

0

使用getchar似乎沒有任何問題。然而,您的循環條件的後半部分存在問題:您將intc)與字符串("\0")進行比較。您可能的意思是使用hexalpha[i] != '\0'(注意單引號)。

除此之外,你沒有看到答案,因爲它從來沒有打印過。在大多數炮彈你可以用$?打印的最後一個程序的返回值(在Windows是%errorlevel%),像這樣:

echo $? 

例如,如果我像這樣運行程序:

> a.out 
b 
> echo $? 
11 

您會發現getchar可以正常工作,但是您看不到輸出,因爲shell通常不會顯示程序的返回值。或者,您可以在程序結尾處添加printf-聲明。無論如何,這是推薦的,因爲main的返回值更常用於確定程序是否成功完成。

printf("%i\n", answer); 
    return 0; 
} 
+0

OP沒有提到他在哪個平臺上,但在Windows上,您需要'echo%errorlevel%'而不是'echo $?'。我想說的是打印答案並返回。畢竟,沒有任何成本可以這樣做。 –