0

ベクトルのすべての数値がゼロに等しいかどうかを比較する必要があります。そうでない場合は、メッセージを出力します。

アドレスの内容を指さそうと思ったのですが、どうすればいいですか?

私のコード:

#include <stdio.h>
#include <stdlib.h>

int main (void)
{
    int linha_user=0, coluna_user=0;
    float *identidade[linha_user][coluna_user];
    int linha, coluna;
    int se=0,sim=0,nao=0;
    printf("Digite o número de linhas desejado na matriz:\n");
    scanf("%d", &linha_user);
    printf("Digite o número de colunas desejado na matriz:\n");
    scanf("%d", &coluna_user);

    for (linha=0;linha<linha_user;linha++)
    {
        for (coluna=0;coluna<coluna_user;coluna++)
        {
            printf("Digite o número desejado para a posição %d,%d\n",linha,coluna);
            scanf("%d", &identidade[linha][coluna]);
        }
    }

    for (linha=0;linha<linha_user;linha++)
    {
        for (coluna=0;coluna<coluna_user;coluna++)
        {
            if (*identidade[linha][coluna] != 0)
            {
                se=nao;
            }
            else
            {
                se=sim;
            }
        }
    }

    if (se == nao)
    {
        printf("Nem todos os elementos são iguais a zero\n");
    }
    else
    {
        printf("Todos os elementos são iguais a zero.\n");
    }

何か案は?

4

2 に答える 2

3

コメント、メッセージ、識別子名には英語を使用してください。

コードを GNUindentで再インデントし、(GCC 4.8 を使用して) でコンパイルしてgcc -Wall -Wextra取得しました

walter.c: In function 'main':
walter.c:22:4: warning: format '%d' expects argument of type 'int *', but argument 2 has type 'float **' [-Wformat=]
scanf ("%d", &identidade[linha][coluna]);
^
walter.c:49:1: warning: control reaches end of non-void function [-Wreturn-type]

}

そしてあなたの宣言

 int linha_user=0, coluna_user=0;
 float *identidade[linha_user][coluna_user];

は確かに間違っています。float ポインターのサイズがゼロの行列を宣言しています (後で設定しlinha_userたりcoluna_user、agscanfまたはいくつかの割り当てを使用しても変更されません)。

優れた C プログラミングの本を読むことを強くお勧めします。

おそらく、(少なくとも Linux では) デバッガー ( gdbLinux のような) とメモリリーク検出器 ( Linux のvalgrindのような) を使ってプログラムをデバッグしたいと思うでしょう。

ところで、使用しているベクトル用語により、 C++ 2011 (GCC 4.8 コンパイラを使用) とそのコンテナー クラス、特にそのstd::vector標準テンプレートを使用することをお勧めします。もちろんg++ -std=c++11 -Wall -g、その場合はコンパイルしたいと思います。

于 2013-03-24T12:18:00.733 に答える
1

あなたの2つのオブジェクトは、あなたのプログラムで同じ値を持っていsimます. 次のように区別する場合は、異なる値 (と など) が必要です。nao001

if (se == nao)

break次に、forループ内で必要なゼロ以外の要素を観察するとき。

于 2013-03-24T12:15:27.047 に答える