我需要比较矢量上的所有数字是否等于零。如果不是,请打印一条消息。
我在考虑指出地址的内容,但我该怎么办呢?
我的代码:
#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");
}
有什么想法吗?
答案 0 :(得分:3)
请在评论,消息和标识符名称中使用英语。
我使用GNU indent
重新创建代码,然后使用gcc -Wall -Wextra
编译它(使用GCC 4.8)并获得
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];
肯定是错的。您正在声明一个零大小的浮点指针矩阵(如果稍后您使用a.g. linha_user
或某些赋值设置coluna_user
或scanf
,则不会更改。
我强烈建议您阅读一些优秀的C编程书。
您可能希望(至少在Linux上)使用调试器(如Linux上的gdb
)和内存泄漏检测器(如Linux上的valgrind)来调试程序。
BTW,你正在使用的 vector 术语让我建议使用C++2011(使用GCC 4.8编译器)及其容器类,特别是它的std::vector标准模板。当然,在这种情况下,您希望使用g++ -std=c++11 -Wall -g
进行编译。
答案 1 :(得分:1)
您的两个对象sim
和nao
在您的计划中具有相同的0
值。如果您想要区分它们,则需要具有不同的值(例如0
和1
):
if (se == nao)
然后当你观察到非零元素时,你需要在break
循环中for
。