2012-11-30 5 views
0

Это мой первый раз, используя Stack Overflow, и я должен предупредить вас, что я начал изучать C ранее на этой неделе. Я пытаюсь написать простую программу, которая найдет, какой цвет имеет наибольшее значение из спектра RGB. Он имеет ручной ввод для каждого цвета, но когда он закончен, я получаю 2 нечетных числа в миллионах. Может ли кто-нибудь помочь noob? Вот код, который я написал до сих пор:Сортировка Красный, Зеленый Синий с использованием 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()'. –

+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's забрасываются. У вас не может быть ; после заявления 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); вряд ли работает. Особенно здесь полуколоны ошибаются.

Смежные вопросы