This Code does what it should do, as long as you really type an integer, as it asks you in line 10, but if you type a letter of something that isn't an integer it just prints out the lines 10 and 14 over and over and I really don't understand why, shouldn't it check the conditions for the while loop before it executes it another time?
1  #include <stdio.h>
2  #include <stdlib.h>
3  #include <time.h>
4 
5  int raten(int zuErraten){
6      int geraten = 0, check = 1, versuche = 0;
7      while (versuche < 100 || geraten != zuErraten) {
8          versuche++;
9          printf("%i\n", versuche);
10         printf("Gib eine Zahl zwischen 1 und 100 ein:\n");
11         check = scanf("%i", &geraten);
12 
13         if (check == 0) {
14             printf("Gib lediglich eine Zahl ein und drücke Enter:\n");
15             check = 1;
16             geraten = 0;
17             continue;
18         }
19 
20         if (geraten < 1 || geraten > 100){
21             printf("Die Zahl sollte wirklich zwischen 1 und 100 sein, wobei 1 und 100 auch erlaubt sind!\n");
22             continue;
23         }   
24 
25         if (geraten < zuErraten) {
26             printf("Du hast %i geraten, diese Zahl ist leider zu klein!\n", geraten);
27         }
28         
29         if (geraten > zuErraten) {
30             printf("Du hast %i geraten, diese Zahl ist leider zu groß!\n", geraten);
31         }
32         
33     } 
34     
35     return versuche;
36 }
37 
38 int main (int argc, char **argv){
39     time_t t; 
40     srand((unsigned) time(&t));
41     int zuErraten, geraten, versuche;
42 
43     zuErraten = (rand()%100) + 1;
44     printf("%i\n", zuErraten);
45     versuche = raten(zuErraten);
46     printf("Herrzlichen Glückwunsch, du hast die Zahl erraten.\nDu hast dafür %i Versuche gebraucht!\n", versuche);
47 }
 
    