getchar 读取每个字符,包括空白字符

scanf会跳过空白字符

 

 
  
  1. #include<stdio.h>  
  2.  
  3. void display(char ch,int rows,int cols);  
  4.  
  5. int main(void){  
  6.     char ch;  
  7.     int rows;  
  8.     int cols;  
  9.  
  10.     while((ch = getchar()) != '\n'){  
  11.         if(scanf("%d%d",&rows,&cols) != 2){//scanf会将换行字符留在输入队列中,与scanf不同,getchar并不跳过这些字符!  
  12.             break;  
  13.         }  
  14.         else{  
  15.             display(ch,rows,cols);  
  16.         }  
  17.         printf("Enter again:\n");  
  18.     }  
  19.  
  20.     return 0;  
  21. }  
  22.  
  23. void display(char ch,int rows,int cols){  
  24.     int i;  
  25.     int j;  
  26.  
  27.     for(i=0;i<rows;i++){  
  28.         for(j=0;j<cols;j++){  
  29.             printf("%c",ch);  
  30.         }  
  31.         printf("\n");  
  32.     }  
  33. }  

我们应该想办法剔除scanf后的垃圾信息!

 

 
  
  1. #include<stdio.h>  
  2.  
  3. void display(char ch,int rows,int cols);  
  4.  
  5. int main(void){  
  6.     char ch;  
  7.     int rows;  
  8.     int cols;  
  9.  
  10.     while((ch = getchar()) != '\n'){  
  11.         if(scanf("%d%d",&rows,&cols) != 2){//scanf会将换行字符留在输入队列中,与scanf不同,getchar并不跳过这些字符!  
  12.             break;  
  13.         }  
  14.         else{  
  15.             display(ch,rows,cols);  
  16.         }  
  17.         while(getchar() != '\n'){//剔除scanf后的所有字符,包括换行符,可以让循环读取下一行开始的字符!  
  18.             continue;  
  19.         }  
  20.         printf("Enter again:\n");  
  21.     }  
  22.  
  23.     return 0;  
  24. }  
  25.  
  26. void display(char ch,int rows,int cols){  
  27.     int i;  
  28.     int j;  
  29.  
  30.     for(i=0;i<rows;i++){  
  31.         for(j=0;j<cols;j++){  
  32.             printf("%c",ch);  
  33.         }  
  34.         printf("\n");  
  35.     }  
  36. }