Scanf Matriz bidimensional [RESOLVIDO]

1. Scanf Matriz bidimensional [RESOLVIDO]

Augusto
LinuxMH

(usa BackTrack)

Enviado em 14/06/2013 - 17:31h

bom, estou com um problema "besta"
tipo para ler uma matriz bidimensional inteiro
exemplo:
int aviao[10][3];
for(int i=0; i<10; i++)
{

printf("Digite o numero do avião , tipo de avião e o preço da passagem");
for(int j=0; j<3; j++)
{
scanf(" %d ",aviao[i][j]);
}
}

se eu usar cin >>aviao[i][j];
da certo, mas scanf da pau, preciso usar o scanf
no printf ele funciona normal printf(" %d ", aviao[i][j]);

mas o scanf não da certo


  


2. Re: Scanf Matriz bidimensional [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 14/06/2013 - 18:41h

O código ficou um pouco truncado, principalmente quando ocorre a sequência "[i]", que o fórum usa como marcador de início de texto em itálicos.

Quando você postar código aqui no fórum do VoL, coloque-o entre as tags [code] e [/code]. Você pode até fazer isso agora, clicando no botão que lhe permite editar a postagem já feita.

Apesar do truncamento, parece que você esqueceu de colocar o operador "&" antes da especificação do elemento da matriz que quer ler. Lembre-se que scanf() precisa sempre receber ponteiros da variáveis que terão valor alterado pela função.


3. Re: Scanf Matriz bidimensional [RESOLVIDO]

Augusto
LinuxMH

(usa BackTrack)

Enviado em 14/06/2013 - 21:11h

Valeu resolvi o problema, é que antes eu estava usando
int vetor[2][2];
for(int i=0; i<2; i++)
{
for(int j=0; j<2; j++)
{
scanf("%d", vetor[i][j]);
}
}

sem o & porque pensei que ja ia passar o endereço, porque matriz unimidensional não precisa,
Obrigadão (;


4. Re: Scanf Matriz bidimensional [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 14/06/2013 - 21:31h

LinuxMH escreveu:

Valeu resolvi o problema, é que antes eu estava usando
int vetor[2][2];
for(int i=0; i<2; i++)
{
for(int j=0; j<2; j++)
{
scanf("%d", vetor[j]);
}
}

sem o & porque pensei que ja ia passar o endereço, porque matriz unimidensional não precisa,
Obrigadão (;


Não sei de onde você tirou isso. Você sempre deve passar endereços a [i]scanf
().

Talvez você tenha se confundido com arrays usadas para armazenar strings. De fato, você pode -- e deve! -- dizer algo como isto

char nome[50];
conv_ok=(scanf("%49[^\n]", nome)==1);
nome[49]=0;


(sem o "&") porque o nome de um array sem estar acompanhado de índice de elemento é exatamente o endereço do primeiro elemento (ou seja: no caso acima, é garantido que nome==&nome[0]).

Mas você não pode extrapolar isso para qualquer situação. Em particular, se você tiver um array de inteiros, não existe conversão em scanf() para ler vários inteiros passando apenas o endereço do primeiro elemento.

No máximo, o que você poderia fazer -- MAS É FEIO E CONFUNDE MAIS DO QUE AJUDA -- seria se valer do fato de que é sempre verdade que array=&array[0], para um array de qualquer tipo, e trocar a referência ao primeiro elemento simplesmente pelo nome do array.

No entanto, existe uma prática -- que eu não sei se está escrita em algum lugar, mas certamente está inscrita nos hábtos de bons programadores -- de deixar claro que quando se quer uma referência de acesso apenas a um elemento n do array, usa-se a sintaxe "&array[n]", mesmo quando n vale zero, e mesmo que seja um array de caracteres. Já o uso do nome sem indicação de índices é preferida quando se quer deixar clara a ideia de que vários elementos do array pode ser modificados ao mesmo tempo (geralmente quando se passa o array como argumento de uma função).






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts