使用C排序红色,绿色蓝色

时间:2012-11-30 19:59:39

标签: c

这是我第一次使用Stack Overflow,我必须警告你,我本周早些时候才开始学习C语言。我正在尝试编写一个简单的程序,它将找出哪种颜色具有RGB光谱中最大的值。它有一个手动输入每种颜色,但当它完成后,我得到2个奇数,数百万。有人可以帮助一个菜鸟吗?这是我到目前为止编写的代码:

#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);
}

3 个答案:

答案 0 :(得分: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;
    ...

是你想要的。

答案 1 :(得分:3)

有一个原因scanf()接受指向其参数的指针:它必须修改它们。

但是,printf()不会修改其参数(通常是...... - 有例外),因此您不必传递指针。变化

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

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

答案 2 :(得分:2)

你应该在你的ifs之后使用{和}。您的if ( r > g );形式几乎无效。特别是半冒号在这里是错误的。