paulo1205
(usa Ubuntu)
Enviado em 10/02/2016 - 23:51h
GustavoBDR escreveu:
--> Pelo que eu sei, para somar valores inteiros de colunas, a matriz deve ser "int":
int v_matriz[0][9];
No exemplo a matriz tem apenas uma linha e 10 colunas.
Não. Isso que você escreveu é simplesmente um erro lógico (ainda que não seja de sintaxe).
Quando você declara um array, você tem de dizer a quantidade de elementos. Quando você diz que uma das dimensões da sua matriz tem zero elementos, concorda que alguma coisa não faz sentido? Para que serve uma matriz com zero linhas?
Não confunda a faixa sobre a qual os índices podem variar com o tamanho declarado. Se você quer um array com um elemento inteiro, deve declará-lo como “
int array[1]”. Na hora de usá-lo é que você deve se lembrar que o primeiro elemento é sempre o que tem índice zero. No nosso caso, como a quantidade máxima de índices possíveis é 1, o primeiro índice possível é também o último. Se fosse um array de cinco elementos, sendo o primeiro índice igual a 0, o índice máximo seria 4. Pode contar para conferir: o conjunto de índices possíveis, {0, 1, 2, 3, 4}, tem ou não tem cinco elementos?
--> Depois atribuí valores as colunas:
puts("Digite um numero:");
scanf("%d",v_matriz);
// Aqui ele já se perde...
Tem mesmo de se perder, não? Você declarou uma matriz com tamanho zero (0×9=0)! A sintaxe da linguagem permite isso -- embora logicamente não faça sentido -- mas o padrão diz que qualquer tentativa de usar um array de tamanho zero tem comportamento indefinido (
undefined behavior, ou “UB”). UB é sempre uma incógnita: pode parecer que funciona, pode corromper a memória associada a outra variável, pode crashar o programa, pode não acontecer rigorosamente nada... Por isso mesmo, você é que
não pode usar um negócio desses.
Corrija sua declaração. Se você quer uma matriz de uma linha por dez colunas com elementos inteiros, tem de dizer o seguinte.
int v_matriz[1][10];
Outro erro é que você colocou
v_matriz como destino da leitura do valor inteiro via
scanf(). Como você usou a conversão
%d, o argumento seguinte deveria ser um ponteiro para inteiro. Entretanto, o tipo de
v_matriz, tomado como expressão, é “ponteiro para array de inteiros com 9 elementos”.
Para dizer como consertar, eu teria primeiro de entender o que você quis fazer. Pelo comentário que você fez na postagem, parece até que você esperava que fosse criado espaço para a sua matriz que inicialmente tinha tamanho zero. É isso?
De todo modo, com
scanf() você terá de ter tantas conversões quantos forem os elementos que você quiser ler. Ou então você chama
scanf() várias vezes seguidas, lendo um elemento de cada vez.
---
Tente consertar pelo menos os pontos que eu já indiquei, e depois volte a perguntar. Realmente, olhando seu código, não consegui entender o que você realmente queria.