Comprobación del tipo de entrada sin salir del progtwig y reiniciarlo

Tengo el requisito de obtener dos enteros y agregar e imprimir el valor agregado. Escribí un progtwig de trabajo. Otro requisito es verificar si el valor de entrada es distinto de entero y si es distinto de entero, sin cerrar el progtwig, debe solicitar nuevamente las entradas.

Código C

#include  void main() { int a,b,c; printf("This is a Addition program"); printf("\n Enter value of a:"); scanf("%d",&a); printf("\n Enter value of b:"); scanf("%d",&b); c=a+b; printf("\n The added value is %d",c); } 

Aquí hay un código que cumplirá completamente con su requisito. Ayer, David C Rankin publicó una respuesta a la misma pregunta básica en Stack Overflow.

Este código es básicamente lo que David proporcionó:

 #include  static int getInt(const char *prompt) { int value; char c; while(printf("%s",prompt) && scanf("%d", &value) !=1) { do { c = getchar(); } while ( c != '\n' && c != EOF ); // flush input printf ("Invalid Entry, Try Again...\n"); } return value; } int sum(int a , int b) { return ( a + b ); } int main(){ int a , b; a = getInt("Please enter a number"); b = getInt("Please enter a number"); printf("Sum is :%d" , sum(a,b)); } 

La función getInt verifica la entrada y grita para la entrada incorrecta.

Este progtwig hará lo que quieras.

 #include int main() //use int not void { int a,b,c; printf("This is a Addition program"); printf("\n Enter value of a:"); while(scanf("%d",&a)==0) { printf("\n Invalid input.Try again:"); getchar(); // clear the previous input } printf("\n Enter value of b:"); while(scanf("%d",&b)==0) { printf("\n Invalid input.Try again:"); getchar(); // clear the previous input } c=a+b; printf("\n The added value is %d",c); return 0; // because main returns int } 

scanf devuelve el número de elementos leídos correctamente, por lo que devolverá 1 en su caso si se ingresó un valor válido. Si no, se ingresó un valor entero no válido y scanf devolverá 0.

Use fgets()/sscanf()/strto...() lugar de scanf() .

scanf() analiza y realiza la entrada en la misma función y no maneja bien la entrada inesperada. Use fgets() para la entrada del usuario y luego escanee / analice.

 #include  #include  #include  #include  int getint(const char *prompt) { char buf[sizeof(int) * CHAR_BIT]; while (1) { fputs(prompt, stdout); fflush(stdout); if (fgets(buf, sizeof buf, stdin) == NULL) { // sample handling of unexpected input issue. // Value to return of EOF or IO error return INT_MIN; } /// strtol() is another option int i, n; // " %n" notes offset of non-white-space after the numebr. if (1 == sscanf(buf, "%d %n", &i, &n) && buf[n] == '\0') { return i; } } } int main(void) { int a, b, c; printf("This is a Addition program"); a = getint("\n Enter value of a:"); b = getint("\n Enter value of b:"); c = a + b; printf("\n The added value is %d", c); return 0; }