Problema con un void

Iniciado por grossgore, 3 Mayo 2017, 23:11 PM

0 Miembros y 1 Visitante están viendo este tema.

grossgore


   Buenas tengo el siguiente problema... tengo un proceso de registro y toda la cuestion y hay un problema que tengo cuando pregunta si  desea agregar otra persona de que cuando presiona s se cierra el programa y no me vuelve a ejecutar el proceso... esto sucede cuando llamo a una funcion  despues de guardar los datos suministrados en un archivo, el proceso funciona correctamente cuando no llama a la funcion con esto me refiero a que si presiono s me vuelve a ejecutar el programa, tanto el proceso como la funcion funcionan correctametnes por separados. No se si me explique bien pero mas o menos di a entender mi problema


aporte(); // Este es el llamado a la funcion

printf("Desea agregar a otra persona (s/n):");
scanf("%c",&rpt);

}while(rpt == 's');

   

MAFUS

Limpia el buffer de entrada poniendo después del scanf
while(getchar()!='\n');

dato000

Problema tipico de scanf, no limpia el buffer de memoria y provoca ese tipo de inconvenientes, desde hace mucho se considera a scanf como una función rota, o simplemente de las malas.

Considera usar funciones más eficientes como fgets o sscanf, en los que tienes que declarar espacios de memoria para almacenar el buffer dedicado para pasar la función y realizar una lectura apropiada de la variable.

Ejemplo de fgets:


#define ROW_BUFF_LEN 128
char row_buffer[ROW_BUFF_LEN] ;
for (i = 0; i < rows; ++i)
{
    fgets( row_buffer, MAX_ROW_LEN, stdin ) ;
    while( sscanf("%d", &arr[i][j++]) == 1 )
    {
        ++j;
    }
}


Ejemplo de sccanf (un poco más enredado, pero pues su uso es para obtener una información determinada que luego se muestra al usuario, no para validación ni para control de flujos como ciclos while)


#include<stdio.h>
#define LINESIZE 1024

int n, sum =0;
char line[LINESIZE];

int main() {
    while(1) {
        printf("enter an integer: ");
        if(!fgets(line, LINESIZE, stdin)) {
            clearerr(stdin);
            break;
        }

        if (sscanf(line, "%d", &n) == 1)
            sum += n;
    }
    printf("%d \n",sum);
}


O pues, si quieres algo simple, para un caracter, usa getchar(), aunque también no es muy recomendable acostumbrarse, pero bueno.
while (rec != EOF)
{
     rec=getchar();
     if((rec != '\n') && (rec != EOF)){     
          printf ("this is variable %c\n",rec);
     }
}