Jump to content

Iniciaçã em arrays


PsySc0rpi0n

Recommended Posts

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ê?

Edited by PsySc0rpi0n

Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Link to comment
Share on other sites

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();
}
Edited by NunoDinis

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

ndsotware.org

Link to comment
Share on other sites

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."

Link to comment
Share on other sites

#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
Link to comment
Share on other sites

Isso nao e' uma matrix, mas sim um array

Ok, seja lá o que fôr... 😛

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"... 😛

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?

Edited by PsySc0rpi0n

Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Link to comment
Share on other sites

eu não gosto do fflush(stdin), isto porque sou do tempo em que isso não fazia nada 😄 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
Link to comment
Share on other sites

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 ();
}

Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Link to comment
Share on other sites

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
Link to comment
Share on other sites

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?

Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.