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()は、アドレスではなく名前を指定する必要があります。

現在表示されているのは、変数がスタックに格納されている場所のアドレスを 10 進数で表したものです。


補足として、あなたのコードはあなたが思っているようには機能しません:

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 に答える