针对scanf吸收回车与空格问题

首先,按了回车scanf结束后,回车会以字符串('\n')的形式进入缓冲区

如果在该程序中还有scanf需要执行,那会分一下情况

  1. scanf(“%c”,&?);如果是字符型,则scanf会接收缓冲区内的回车

#include

int main(){
    char str[11][11];
    for(int i=1;i<11;i++){
        for(int j=1;j<11;j++){
            scanf("%c",&str[i][j]);
        }
    }
    
    printf("\n");
    
    
    for(int i=1;i<11;i++){
        for(int j=1;j<11;j++){
            printf("%c",str[i][j]);
        }
    }
} 

运行结果:(输入输出是不一致的,一共100个空间,最后有九个回车被放入了数组里,而一些字符则放不下了)

*...*.....
......*...
...*...*..
..........
...*.F....
*.....*...
...*......
..C......*
...*.*....
.*.*......

*...*.....
......*...
...*...*..
..........
...*.F....
*.....*...
...*......
..C......*
...*.*....
.

  1. scanf(“%d”,&?); 如果是数值型,则scanf不会接收缓冲区内的回车

#include

int main(){
    int a[10][10];
    for(int i=0;i<4;i++){
        for(int j=0;j<4;j++)
            scanf("%d",&a[i][j]);
    }
    
    for(int i=0;i<4;i++){
        for(int j=0;j<4;j++)
            printf("%d ",a[i][j]);
        printf("\n");
    }
    
} 

运行结果

1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4

1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4

那么我不需要这个回车被接收怎么办?

这时我们可以采取一定措施吸收这个回车,有一下措施:

  1. 在前一个scanf结束后用一个getchar()接收。

#include

int main(){
    char str[11][11];
    for(int i=1;i<11;i++){
        for(int j=1;j<11;j++){
            scanf("%c",&str[i][j]);
        }
        getchar();
    }
    
    printf("\n");
    
    
    for(int i=1;i<11;i++){
        for(int j=1;j<11;j++){
            printf("%c",str[i][j]);
        }
        printf("\n");
    }
} 

运行结果

*...*.....
......*...
...*...*..
..........
...*.F....
*.....*...
...*......
..C......*
...*.*....
.*.*......

*...*.....
......*...
...*...*..
..........
...*.F....
*.....*...
...*......
..C......*
...*.*....
.*.*......
  1. scanf(" %c",&?);在%c前加一个空格(换成\n或者\t也可以),这样就把缓冲区中的回车当成第一个字符吸收掉。

#include

int main(){
    char str[11][11];
    for(int i=1;i<11;i++){
        for(int j=1;j<11;j++){
            //scanf("\n%c",&str[i][j]);
            //scanf(" %c",&str[i][j]);
            scanf("\t%c",&str[i][j]);
        }
        //getchar();
    }
    
    printf("\n");
    
    
    for(int i=1;i<11;i++){
        for(int j=1;j<11;j++){
            printf("%c",str[i][j]);
        }
        printf("\n");
    }
} 

运行结果

*...*.....
......*...
...*...*..
..........
...*.F....
*.....*...
...*......
..C......*
...*.*....
.*.*......

*...*.....
......*...
...*...*..
..........
...*.F....
*.....*...
...*......
..C......*
...*.*....
.*.*......

你可能感兴趣的:(数据结构与算法,数据结构,算法,c语言)