getchar 读取每个字符,包括空白字符
scanf会跳过空白字符
- #include<stdio.h>
- void display(char ch,int rows,int cols);
- int main(void){
- char ch;
- int rows;
- int cols;
- while((ch = getchar()) != '\n'){
- if(scanf("%d%d",&rows,&cols) != 2){//scanf会将换行字符留在输入队列中,与scanf不同,getchar并不跳过这些字符!
- break;
- }
- else{
- display(ch,rows,cols);
- }
- printf("Enter again:\n");
- }
- return 0;
- }
- void display(char ch,int rows,int cols){
- int i;
- int j;
- for(i=0;i<rows;i++){
- for(j=0;j<cols;j++){
- printf("%c",ch);
- }
- printf("\n");
- }
- }
我们应该想办法剔除scanf后的垃圾信息!
- #include<stdio.h>
- void display(char ch,int rows,int cols);
- int main(void){
- char ch;
- int rows;
- int cols;
- while((ch = getchar()) != '\n'){
- if(scanf("%d%d",&rows,&cols) != 2){//scanf会将换行字符留在输入队列中,与scanf不同,getchar并不跳过这些字符!
- break;
- }
- else{
- display(ch,rows,cols);
- }
- while(getchar() != '\n'){//剔除scanf后的所有字符,包括换行符,可以让循环读取下一行开始的字符!
- continue;
- }
- printf("Enter again:\n");
- }
- return 0;
- }
- void display(char ch,int rows,int cols){
- int i;
- int j;
- for(i=0;i<rows;i++){
- for(j=0;j<cols;j++){
- printf("%c",ch);
- }
- printf("\n");
- }
- }
转载于:https://blog.51cto.com/fanaticssk/826155