Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: n-utz en 13 Octubre 2016, 20:34 pm



Título: Errores sencillos en TP final
Publicado por: n-utz en 13 Octubre 2016, 20:34 pm
Buenas, vengo con dos errores, se trata de un programa de archivos secuenciales. En este caso los errores lo tengo en la parte de altas de "alumnos", donde tengo que ingresar sus datos a través de un registro y almacenarlos en un archivo.

Primer problema, sucede cuando doy opciones de las ramas de secundarios del alumno ingresante, le doy 3 opciones al usuario con un sub-menu sencillo que entra a un switch con un entero. El problema surge cuando se elige la rama Cs Sociales (opcion 2), ya qué no solo se guarda en el campo rama "Cs Sociales" sino que además le agrega al final el nombre del establecimiento que cómo verán lo pido abajo, les dejo el código y la salida.

Código:
printf("Informacion acerca del titulo secundario");
    fflush(stdin);
    printf("\nIngrese la rama de estudio\n\t1)Tecnico\n\t2)Cs Sociales\n\t3)Comercial\n\t\tOpcion: ");
    scanf("%d",&rama);
    while(rama<1 || rama>3){
        printf("Opcion incorrecta, vuelva a ingresar el numero segun el menu\n");
        printf("\t1)Tecnico\n\t2)Cs Sociales\n\n3)Comercial\n\t\tOpcion: ");
        scanf("%d", &rama);
    }
    switch(rama){
        case 1: strcpy(a.college.rama,"Tecnico"); break;
        case 2: strcpy(a.college.rama,"CsSociales"); break;
        case 3: strcpy(a.college.rama,"Comercial"); break;}
    printf("\nIngrese el establecimiento donde se obtuvo: ");
    fflush(stdin);
    scanf("%[^\n]",&a.college.establecimiento);

Salida:

Código:
Rama: CsSocialesSan Andres

Siendo San Andres el nombre del establecimiento ingresado. Esto solo sucede con la opción dos.

Y el segundo error es algo pavo, pero no sé dónde está el error de sintaxis, sucede que al pedir que ingrese el sexo en modo de caracter por "M" o "F", armé una comprobación de que si entran alguna otra letra, devuelve un error. Pero no solo imprime el mensaje de error una sola vez, sino que lo imprime dos veces seguidas y no sé por qué, les dejo la parte del código y su salida.

Código:
printf("\nIngrese el sexo del alumno (M-F): ");
    fflush(stdin);
    scanf("%c",&a.sexo);
    while(a.sexo!='m'&&a.sexo!='M'&&a.sexo!='f'&&a.sexo!='F'){
        printf("\nError, vuelva a ingresar (M\\N): ");
        scanf("%c",&a.sexo);
    } if(a.sexo=='m')a.sexo='M'; if(a.sexo=='f')a.sexo='F';

Salida:

Código:
Ingrese el sexo del alumno (M-F): s

Error, vuelva a ingresar (M/F):
Error, vuelva a ingresar (M/F):

Gracias.