0

这是我第一次使用 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);
}
4

3 回答 3

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;
    ...

是你想要的。

于 2012-11-30T20:02:02.553 回答
3

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

但是,printf()不会修改它的参数(通常...... - 有例外),所以你不必向它传递指针。改变

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

printf("%d\n", mm);
printf("%d\n", m);
于 2012-11-30T20:01:44.173 回答
2

您应该在 if 之后使用 { 和 }。你的形式if ( r > g );几乎不起作用。尤其是分号在这里是错误的。

于 2012-11-30T20:11:22.543 回答