Juego de adivinanzas aleatorias – error

Tengo un problema en este código cuando ingreso una cadena, en lugar de un entero. ¿Cómo verifico si el usuario ha introducido un carácter en lugar de un entero? (Me gustaría enviar un mensaje al usuario que indique que debe usar números, no caracteres)

TAMBIÉN: si encuentras algo en este código que pueda mejorar, ¡ayúdame! (Soy nuevo en C)

#include  #include  #include  int main () { int secret, answer; srand((unsigned)time(NULL)); secret = rand() % 10 + 1; do { printf ("Guess a number between 1 and 10"); scanf ("%d",&answer); if (secretanswer) puts ("Guess a lower value"); } while (secret!=answer); puts ("Congratz!"); return 0; } 

scanf devuelve el número de coincidencias que se encuentran. En su caso, devolverá 1 si lee un número. 0 si no puede leer un número en:

 if(scanf ("%d",&answer) != 1){ puts("Please input a number"); // Now read in the rest of stdin and throw it away. char ch; while ((ch = getchar()) != '\n' && ch != EOF); // Skip to the next iteration of the do while loop continue; } 

Lea la entrada como una cadena ( char[] y %s ), verifique que todos los caracteres sean ( isdigit() ) dígitos (posiblemente permitiendo un '+' o '-' como primer carácter) y use atoi() para convertir a int .

Debería escribir una función que devuelva verdadero si y solo si cada carácter de la cadena es un dígito, y de lo contrario es falso.

 char * in_str; int answer; ... sscanf("%s", in_str); if (!is_number(in_str)) { printf("Please put in a number, not a letter"); } else { answer = atoi(in_str); } ... 

Necesitas implementar la función is_number

Ya que no puede asumir que la entrada del usuario es un número entero, scanf() que scanf() acepte una cadena en su lugar. Luego intente convertir esa cadena con strtol() ; eso devolverá 0 si la entrada no era un entero.

Lea la entrada como una cadena con fgets y luego use strtol para verificar la entrada. strtol contrario a atoi es capaz de hacer la comprobación de errores