2014-02-11 44 views
0

不兼容的類型試圖找出這裏發生了什麼。我只是在學C,所以對我來說很容易。 :P我被分配來創建一個從釐米到英寸的單位轉換器。我懂了。現在我想通過創建選項來增加一點點。我的編譯器不喜歡我所擁有的。這是第幾行....將'float'分配給`char [3]'

main(void) 

{ 
float centimeter; 
char cnv[3]; 
float entry; 
float oz; 
float lb; 
float cm; 
float lb1; 
centimeter=2.54; 
lb1=2.2; 



printf("Hello. Please type exactly, the type of conversion you would like to do.\n\n1. cm to in\n\n2. lb to kg\n"); 
scanf("%3c",&cnv); 


    if (strcmp(cnv=cm)); 
     { 
     printf("Please enter your length in centimeters:\n"); 
     scanf("%f",&entry); 
     printf("with %.0f centimeters in length, that converts to %.2f inches.",entry,entry/centimeter); 
     } 

    if (strcmp(cnv=lb)); 
     { 
     printf("Please enter your weight in pounds:\n"); 
     scanf("%f",&entry); 
     printf("with %.0f Pound(s) of weight, that converts to %.2f Kilogram(s).",entry,entry/lb1); 
     } 


} 

它給我錯誤的標題。我怎樣才能解決這個問題?

+0

它給你什麼確切的錯誤? – turnt

回答

0
  1. 的「=」運算符用於分配值不能比較。您應該使用'=='進行比較。
  2. 你是不同類型的值。您應該將其中一個變量轉換爲另一個類型進行比較。
  3. 字符串必須與像s​​trcmp()這樣的字符串比較函數進行比較,但strcmp()是一個函數,因此您應該用逗號分隔它們來傳遞參數。
  4. 順便STRCMP()返回0,當你傳遞的字符串是相等的,因此,使用語法更像這將是適當的:if(!strcmp(cnv, cm))if(strcmp(cnv, cm) == 0)

  5. 如果我可能需要猜測你到底看起來是這樣的:if(strcmp(cnv, "cm") == 0)釐米是一個變量的名稱,而「釐米」是一個零終止的字符串,字符'c'和'米'

  6. 接下來你需要擔心的是正在從scanf中讀取3個字符,因爲如果輸入是「cm」並且用戶按下Enter鍵輸入文本。程序掃描了3個字符,其中之一是換行符'\ n'。所以當你去做strcmp()時,程序會比較每個字符,直到達到一個被清零的字節。只讀了3個字符,我不確定您捕獲的字符串是否是零終止的,但我確信該字符串可能包含'\ n',這會導致strcmp()方法的結果不可用。

3

1)你混淆=(分配)與==(測試平等)

2)不能直接比較的數值爲一個字符陣列。如果你使用strcmp()(並且理解該函數如何返回結果,這不是你在這裏假設的),你需要將其中一個或另一個轉換爲可比較的類型 - 將該數字轉換爲字符串,或者將字符串轉換爲數字類型並進行比較。