每当我们进行输入的时候,我们都要想到是否需要处理剩余的垃圾输入,从而让它们不会影响到我们的后续输入!尤其是gechar和“回车符”一起使用的时候!

 

  1. #include<stdio.h>  
  2. #define MAX 1000  
  3. #define MIN -1000  
  4.  
  5. bool bad_limits(int start,int end,int low,int high);  
  6. int get_int();  
  7. double answer(int start,int end);  
  8.  
  9. int main(void){  
  10.     int start;  
  11.     int end;  
  12.     double result;  
  13.  
  14.     do{  
  15.         printf("Please Enter the start (EOF to quit)\n");  
  16.         start = get_int();  
  17.         printf("Please Enter the end (EOF to quit)\n");  
  18.         end = get_int();  
  19.         if(bad_limits(start,end,MIN,MAX)){  
  20.             printf("Please try again!\n");  
  21.             continue;  
  22.         }  
  23.         else{  
  24.             result = answer(start,end);  
  25.             printf("The answer is %lf\n",result);  
  26.         }  
  27.     }while(start !=0 || end != 0);  
  28.     printf("Bye\n");  
  29.  
  30.     return 0;  
  31. }  
  32.  
  33. int get_int(){  
  34.     int input;  
  35.     char ch;  
  36.       
  37.     while(scanf("%d",&input) != 1){//如果输入有问题  
  38.         while((ch = getchar()) != '\n'){//丢弃该行中的所有输入  
  39.             putchar(ch);//并将这些垃圾值显示出来  
  40.         }  
  41.         printf(" is not an integer.\n");  
  42.     }  
  43.     return input;  
  44. }  
  45.  
  46. double answer(int start,int end){  
  47.     double total = 0;  
  48.     int i;  
  49.  
  50.     for(i=start;i<=end;i++){  
  51.         total += i * i;  
  52.     }  
  53.     return total;  
  54. }  
  55.  
  56. bool bad_limits(int start,int end,int low,int high){  
  57.     bool not_good = false;//设置标记位  
  58.  
  59.     if(start > end){  
  60.         printf("start too big!\n");  
  61.         not_good = true;  
  62.     }  
  63.     if(start <low || end >high){  
  64.         printf("another problem!\n");  
  65.         not_good = true;  
  66.     }  
  67.     return not_good;