El código C hace … mientras el problema de bucle

Actualmente estoy experimentando problemas relacionados con un ciclo do … while en mi código C. El problema es que cuando ingreso un valor incorrecto para almacenar en dataTest [51], SÍ valida y establece el problema (por ejemplo, la longitud del paquete sobre 50, solo los números). Sin embargo, cuando se me solicita nuevamente que ingrese un valor válido, escribo un valor correcto y presiono enter, pero el ingreso no se reconoce como “ingreso” de esos datos en la variable, se reconoce como una nueva línea que actúa como si no hubiera Hay un valor allí.

char dataTest[51]; do { int stp = 0; valid = 0; printf("\nPlease enter the packet data (maximum of 50 numbers): "); while(getchar()!='\n'); scanf("%s", dataTest); length = strlen(dataTest); if(length <= 50) { for(i=0;i= 0 && dataTest[i] <= '9') || (dataTest[i] == '0') ) { valid=1; //set the valid variable equal to 1 } else { printf("\nData must contain only numbers, '%c' is not a number. Please try again. \n", dataTest[i]); stp = 1; valid=0; //set the valid variable to equal 0 } } } else { while(getchar()!='\n'); printf("\nData should have no more than 50 numbers, you have entered %i",length); valid = 0; } } while(valid!=1); 

¡Cualquier ayuda es muy apreciada!

El progtwig funciona para mí en su escenario SI inicializo la variable stp a 0. Si cree que puede eliminarlo por completo y usar en su lugar valid . Esto no resuelve el desbordamiento de búfer para más de 50 caracteres, pero creo que esto no es una preocupación para su scope del problema.

Edición: el código que resuelve todos los problemas (… excepto el número de caracteres desbordados)

Aquí está la solución de fgets sugerida por Joachim Pileborg (note dataTest[i] >= '0' y la eliminación del carácter de nueva línea):

 int valid, length, i; char dataTest[50+3]; // 3: '\n','\0' + one more to test 50 characters overflow do { valid = 1; printf("\nPlease enter the packet data (maximum of 50 numbers): "); fgets(dataTest, sizeof(dataTest), stdin); length = strlen(dataTest); --length; // remove last '\n' if (length <= 50) { for(i=0;i= '0' && dataTest[i] <= '9')) { valid=1; //set the valid variable equal to 1 } else { printf("\nData must contain only numbers, '%c' is not a number.Please try again. \n", dataTest[i]); valid=0; //set the valid variable to equal 0 } } } else { printf("\nData should have no more than 50 numbers"); valid = 0; } } while(valid!=1); 

Creo que esta oración while (getchar ()! = ‘\ N’); hacerte sentir confundido, puedes deshacerte de él.

Y el bucle for debe ser

 for(i=0;i<=length-1 && stp!=1;i++) { if ( dataTest[i] >= '0' && dataTest[i] <= '9' ) { valid=1; } else { printf("\nData must contain only numbers, '%c' is not a number.Please try again. \n", dataTest[i]); stp = 1; valid=0; } }