Entrada solo progtwigcion número C

Actualmente estoy haciendo un progtwig para obtener la entrada (0 a 50) del usuario. Si el número está fuera del rango, no se contará el número. Después de eso, calcularé y obtendré el promedio, el máximo y el mínimo para esas entradas. Me enfrento a un problema cuando el usuario introduce caracteres. El progtwig se romperá. Me pregunto ¿cómo puedo resolver este problema? Gracias por adelantado.

#include  #include  #include  using namespace std; int main() { int i=1 , j=1,skor; //variable untuk jumlah ujian float total = 0, average; //variable untuk skor ujian, jumlah dan purata int min=99999; //variable untuk min int max=0; //variable untuk max printf("*******************************************************************************\n"); printf("* Enter test scores,-1 to exit \n"); printf("*******************************************************************************\n"); printf("* \n"); //masukkan data skor dan perhitungan jumlah keseluruhan skor while (skor != -1) { printf("* Scores[%d] (0-50) : ", i); scanf("%d", &skor); if(skor>-1&&skormax&&skor<51&&skor!=-1) { max=skor; } if(skor=0&&skor!=-1) { min=skor; } i++; } j=j-1; //pengiraan purata average = total / j; //printf("\nJumlah = %.2f\n", Jumlah); //printf("\nj = %d\n", j); printf("* \n"); printf("*******************************************************************************\n"); printf("* \n* Average marks = %.2f \n", average); printf("* \n"); printf("*******************************************************************************\n"); //pemaparan nilai min dan max printf("* \n"); printf("* MIN:%d \n", min); printf("* MAX:%d \n", max); printf("* \n"); printf("*******************************************************************************\n"); getch(); return 0; } 

Quiero limitar que la entrada sea solo para valores enteros y no permitir que el usuario ingrese un carácter para que el progtwig no se agriete.

Podrías elegir entre las opciones:
A. Tome la entrada como cadena y luego verifique si la cadena es número. Si no, descártala.
B. Trampa bajada de teclas. Si es alfabeto o símbolo, descartar. Si es 0-9, úsalo.

Me gusta esto

 #include  #include  #include  #include  #include  int get_int(const char *prompt){ char buff[32]; for(;;){ fputs(prompt, stdout);fflush(stdout); if(fgets(buff, sizeof buff, stdin)){ if(strchr(buff, '\n')){ char *endp; long n; errno = 0; n = strtol(buff, &endp, 10); if(errno == 0 && *endp == '\n' && INT_MIN <= n && n <= INT_MAX) return n; } else {//too long input while(getchar() != '\n'); } } else {//input EOF continue;//ignore EOF } } } int main(void){ int n = 0, score, min = INT_MAX, max = INT_MIN; double total = 0, average; printf("Enter test scores,-1 to exit\n"); while((score = get_int("* Scores[%d] (0-50) : ")) != -1){ if(score < 0 || score > 50) continue; total += score; if(score > max) max = score; if(score < min) min = score; ++n; } if(n){ average = total / n; printf("Average marks = %.2f\n", average); printf("MIN:%d\n", min); printf("MAX:%d\n", max); } else { puts("No valid input"); } }