Problema con bucle

oZk4h

Buenas.
Vereis: me ha surgido un problema k no se como resolver mientras estaba haciendo un ejercicio de las practicas de la uni. Es un problema al que le metes el nombre del alumno y su nota y te sigue pidiendo hasta k el primer caracter es nulo(el enunciado pone k es enter). Resulta k vale, el primer nombre me lo pilla y la nota tb , pero cuando le meto la segunda nota no se xk se para, cuando debería seguir preguntadome mas alumnos hasta k yo le diese al enter(mi profesor me explico k el enter se considera un caracter nulo o algo asi xD, de ahi lo del while).

PD:Me refiero todo el rato a C xD, concretamente estamos con los punteros, pero me ha surgido la movida esta k no se como arregrarla, he probado a meter if's dentro del while pero na.. tiene k haber alguna forma xD.

Akí os pongo un link con el problema( es el 2) y el codigo fuente de lo k he intentado hasta ahora:
http://www.bigupload.com/d=BE08CA6C
otro por si os va lento:
http://www.megaupload.com/?d=RFE6YLSE

Para los vagos copio lo k puse en el dev-c++:

#include <stdio.h>
#include <math.h>

int main() {


char alumno[150];
float nota,porcent,maxnot,promenot,sumanot; int numal,numapr;
numal=0; numapr=0; maxnot=-1; sumanot=0;


FILE*p;
p=fopen("examen.txt","w");



printf("\nNombre y apellidos del alumno:"); gets(alumno);
printf("Nota [0-10] del alumno:"); scanf("%f",&nota); 

while ( alumno[0] ) { 
      numal++; sumanot=sumanot+nota;
      if (nota>=5) numapr++;   
      if (nota>maxnot) maxnot=nota;                 
      fprintf(p,"%s\t\t%f\n",alumno,nota);




printf("\nNombre y apellidos del alumno:"); gets(alumno);
printf("Nota [0-10] del alumno:"); scanf("%f",&nota);


}
fclose(p);


 promenot=sumanot/numal;
 porcent=(numapr/numal)*100;
 
 printf("\nSe han introducido %d alumnos",numal);
 printf("\nHan aprobado %d",numapr);
 printf("\nEl porcentaje de aprobados es %f",porcent);
 printf("\nLa maxima nota obtenida es %f",maxnot);
 printf("\nEl promedio total de las notas es %f",promenot);

getch(); return 0; }

salu2, espero vuestras respuestas.
gracias por adelantado.

KaBeZiLLa

la condicion del while deberia ser asi:

while ( alumno[0] != '\n')

\n es el caracter salto de linea, es decir, el enter

saludos

oZk4h

hmm ahora cuando se repite el bucle la segunda vez me sale el nombre como si lo hubiera puesto ya ( en blanco ) y no me deja ponerlo, sólo la nota xD. Me parece k paso de esto ya xD.

KaBeZiLLa

supongo que es cosa de que en el buffer se te queda un salto de linea y entonces al llegar al nombre pues directamente lo coje y pasa a pedir la nota.

Si es eso, en algun sitio tendras que recoger el caracter sin guardarlo en ningun sitio, no se si la funcion es getc, seria algo asi:

getc();

Lo mejor que puedes hacer creo que es hacer una traza con el depurador y ver lo que pasa, supongo que el devC tendra depurador..

Saludos

oZk4h

ya lo solucioné , el problema se soluciono metiendo un fflush en una linea dentro del bucle xD.

thx

Usuarios habituales

  • oZk4h
  • KaBeZiLLa