Ir para o conteúdo
PsySc0rpi0n

Iniciaçã em arrays

Mensagens Recomendadas

PsySc0rpi0n

Fiz este simples code para ver e experimentar como funciona uma matriz.

#include <stdio.h>
int main (){
int i, j;
float notas [10];
printf ("Introduza as notas: \n");
for (i=0; i<10; i++)
	scanf ("%f", &notas [i]);
for (j=0; j<10; j++){
	printf ("Nota %d:\t%.1f\n", j+1, notas [j]);
	getchar ();
}
return 0;
getchar ();
}

Quando acabo de inserir as notas ele em vez de me mostrar uma nota de cada vez, mostra-me as duas primieras seguidas e só depois me pede para pressionar uma tecla para continuar e a partir daqui começa a colocar duas mudanças de linha por cada nota sem nunca respeitar o "\t" à excepção da última iteracção!!!

Porquê?

Editado por PsySc0rpi0n

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
NunoDinis

Tira o getchar do segundo ciclo

#include <conio.h>
#include <stdio.h>
int main (){
 int i, j;
 float notas [10];
 printf ("Introduza as notas: \n");
 for (i=0; i<10; i++)
       scanf ("%f", &notas [i]);
  for (j=0; j<10; j++){
       printf ("Nota %d:\t%.1f\n", j+1, notas [j]);
   }
  getch();
}

Editado por NunoDinis

Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pikax

Isso nao e' uma matrix, mas sim um array


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
NunoDinis

printf ("Nota %d:\t%.1f\n", j+1, notas [j]);

Uma observação: Porque estás a usar j+1 ?

Editado por NunoDinis

Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo
#include <stdio.h>
int main (){
       int i, j;
       float notas [10];
       printf ("Introduza as notas: \n");


       for (i=0; i<10; i++)
               // o scanf retira todos os caracteres de espaço até encontrar alguma coisa para ler
               // por isso se existir um enter antes do número, nem te apercebes que o scanf o retira
               scanf ("%f", &notas [i]);


// --------------------------------------
// tu não te apercebes mas o último enter ainda se encontra no buffer
// --------------------------------------


       for (j=0; j<10; j++){
               printf ("Nota %d:\t%.1f\n", j+1, notas [j]);
               // no primeiro ciclo, o enter que ficou no buffer é retirado
               getchar ();
       }
       return 0;
       getchar ();
}


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
PsySc0rpi0n

Isso nao e' uma matrix, mas sim um array

Ok, seja lá o que fôr... :P

printf ("Nota %d:\t%.1f\n", j+1, notas [j]);

Uma observação: Porque estás a usar j+1 ?

Porque quando fiz o code não reparei que podia usar na mesma o "i"... :P

Tira o getchar do segundo ciclo

#include <conio.h>
#include <stdio.h>
int main (){
 int i, j;
 float notas [10];
 printf ("Introduza as notas: \n");
 for (i=0; i<10; i++)
	scanf ("%f", &notas [i]);
  for (j=0; j<10; j++){
	printf ("Nota %d:\t%.1f\n", j+1, notas [j]);
}
  getch();
}

Mas eu quero que o programa mostre uma nota por cada enter que o utilizador pressione...

#include <stdio.h>
int main (){
	int i, j;
	float notas [10];
	printf ("Introduza as notas: \n");


	for (i=0; i<10; i++)
			// o scanf retira todos os caracteres de espaço até encontrar alguma coisa para ler
			// por isso se existir um enter antes do número, nem te apercebes que o scanf o retira
			scanf ("%f", &notas [i]);


// --------------------------------------
// tu não te apercebes mas o último enter ainda se encontra no buffer
// --------------------------------------


	for (j=0; j<10; j++){
			printf ("Nota %d:\t%.1f\n", j+1, notas [j]);
			// no primeiro ciclo, o enter que ficou no buffer é retirado
			getchar ();
	}
	return 0;
	getchar ();
}

Então qual é a solução???

Colocar um fflush (stdin) no início do último loop?

Editado por PsySc0rpi0n

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

eu não gosto do fflush(stdin), isto porque sou do tempo em que isso não fazia nada :D mas parece que isso agora faz o que se espera (em maior parte dos sistemas/compiladores).

só necessitas de ter isso uma vez após o primeiro ciclo.

eu como sempre leio do teclado com o fgets, esse tipo de problemas nunca me aparece ...


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
PsySc0rpi0n

Agora está assim mas está a dar o mesmo problema

#include <stdio.h>
int main (){
    int i;
    float notas [10];
		    printf ("Introduza as notas: \n");
    for (i=0; i<10; i++)
		    scanf ("%f", &notas [i]);
    fflush (stdin);
    for (i=0; i<10; i++){
		    printf ("Nota %d:\t%.1f\n", i+1, notas [i]);
		    getchar ();
    }
return 0;
getchar ();
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

pois ... como disse, eu não gosto dessa combinação da instrução, exactamente devivo a casos particulares

experimenta assim :

char c;

// ...

for (i=0; i<10; i++)
 scanf ("%f", &notas [i]);

while ((c = getchar()) != '\n' && c != EOF);

for (i=0; i<10; i++){
// ...


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
PsySc0rpi0n

Dizias assim:

#include <stdio.h>
int main (){
    int i;
    char c;
    float notas [10];
		    printf ("Introduza as notas: \n");
    for (i=0; i<10; i++)
		    scanf ("%f", &notas [i]);
    while ((c=getchar ()) !='\n' && c!=EOF){
    for (i=0; i<10; i++){
		    printf ("Nota %d:\t%.1f\n", i+1, notas [i]);
		    getchar ();
    }
    }
return 0;
getchar ();
}

Não deu...

Assim que chega ao fim de preencher a array, termina o programa, provavelmente porque tem um '\n' no buffer quando entra no while, não?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.