2012-11-30 143 views
0

這是我第一次使用堆棧溢出,並且我必須警告您,本週早些時候我纔開始學習C語言。我正在嘗試編寫一個簡單的程序,該程序將查找哪種顏色具有RGB光譜中最大的值。它爲每種顏色都有一個手動輸入,但是當它完成時,我會得到兩百萬的數字。有人可以幫助noob嗎?這裏是我到目前爲止已經編寫的代碼:使用C排序紅色,綠色藍色使用C

#include <stdio.h> 

int main() 
{ 
    int mm, m; 
    int hh, h; 
    int r, g, b, c; 

    printf("Enter Value For Red (0-255)\n"); 
    scanf("%d", &r); 
    printf("Enter Value For Green (0-255)\n"); 
    scanf("%d", &g); 
    printf("Enter Value For Blue (0-255)\n"); 
    scanf("%d", &b); 


    if (r > g); 
     if (r > b); 
      mm = r; 
      if (g > b); 
       m = b; 
      if (b > g); 
       m = g; 
     if (r < b); 
      mm = b; 
      m = g; 
    if (g > r); 
     if (g > b); 
      mm = g; 
      if (r > b); 
       m = b; 
      if (b > r); 
       m = r; 
     if (g < b); 
      mm = b; 
      m = r; 

    printf("%d\n", &mm); 
    printf("%d\n", &m); 
} 
+0

請下次閱讀您嘗試使用的功能的文檔。另外,有很多關於使用'printf()'的例子。 – 2012-11-30 20:03:17

+1

除了錯誤類型的'printf'參數之外,您不會處理兩個(或三個)相等值的情況,那麼'mm'和'm'將保持未初始化狀態。 –

+0

添加到@DanielFischer的註釋中,您的'if'語句也都是錯誤的。 (請參閱下面的答案) – Mike

回答

4
printf("%d\n", &mm); 
printf("%d\n", &m); 

應該是:

printf("%d\n", mm); 
printf("%d\n", m); 

&獲取變量的地址。當你設置變量通過scanf()你需要給地址,以便它可以設置。當你打印通過printf()一個變量的值,你只需要提供的名稱,而不是地址。

你現在看到的是你的變量作爲十進制數存儲在堆棧中的地址。


側面說明,您的代碼不工作的方式,你認爲它的作用:

if (r > g); 
    if (r > b); 
     mm = r; 
     if (g > b); 
      m = b; 
     if (b > g); 
      m = g; 
    if (r < b); 
     mm = b; 
     m = g; 

重要的是要得到這個工作需要更多的則縮進,現在它做了以下內容:

mm = r; 
m = b; 
m = g; 
mm = b; 
... 

每次你運行它,因爲if正在被卡住。在if聲明後面不能有;,或者它不會執行下面的操作。還可以使用大括號{ }做一個範圍做多那麼一兩件事:

if (r > g) 
{ 
    if (r > b) 
    { 
     mm = r; 
     if (g > b) 
      m = b; 
     if (b > g) 
      m = g; 
    } 
    if (r < b) 
    { 
     mm = b; 
     m = g; 
    ... 

是你想要的。

+0

謝謝。有效! –

3

是有原因的scanf()接受指向它的參數:它必須修改它們。

但是,printf()不會修改它的參數(通常...... - 有例外),所以你不必傳遞它的指針。更改

printf("%d\n", &mm); 
printf("%d\n", &m); 

printf("%d\n", mm); 
printf("%d\n", m); 
+0

謝謝。我會馬上改變 –

2

您應該在ifs之後使用{和}。您的if (r > g);表格確實難以奏效。尤其是分號在這裏是錯誤的。

相關問題