为什么二维数组输入后这样输出最后一行没有输出出来

这是代码

#include <stdio.h>
#include<iostream>
using namespace std;
int main()
{
    int n;
    cin >> n;
    char a[n+5][n+5];
    for (int i = 0; i <= n - 1; i++)
    {
        for (int j = 0; j <= n - 1; j++)
        {
            scanf("%c", &a[i][j]); 
        }
    }
    for (int k = 0; k < n ; k++)
    {  
        for(int m = 0 ; m < n ; m++){
        cout << a[k][m];
        }
    }
    for (int m = 0 ; m < n ; m++){
        cout << a[n-1][m];
        }
    return 0;
}

输入

9
 @  @@@@@
@@@  @@@ 
 @   @ @ 
@@@  @@@ 
@@@ @@@@@
@@@ @ @ @
@@@ @@@@@
 @  @ @ @
 @  @@@@@


运行结果


 @  @@@@@
@@@  @@@ 
 @   @ @ 
@@@  @@@ 
@@@ @@@@@
@@@ @ @ @
@@@ @@@@@
 @  @ @ @
@  @ @ @




可以看到a数组最后一行没有输出出来,然后重新写的循环输出最后一行就并不是输入的那串数据了,想知道这是为什么?

比较一下
#include <stdio.h>
int main()
{
int n=3;
int a[n][n];
for(int i=0;i<n;i++){
for(int j=0;j<n;j++)
scanf("%c",&a[i][j]);
getchar();
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++)
printf("%c",a[i][j]);
printf("\n");

}
return 0;

}

scanf("%c", &a[i][j]);
换行符也被当字符接收了,而且记录到了下一行的第一个字符。
这么改吧:

#include <stdio.h>
#include<iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;
    char a[n+5][n+5] = {0};
    for (int i = 0; i <= n - 1; i++)
    {
        getchar();
        gets(a[i]);
    }
    for (int k = 0; k < n ; k++)
    {  
        cout<<a[k]<<endl;
    }
    return 0;
}
 

因为每一行输入之后都有一个换行符‘\n’
scanf("%c", &a[i][j])是会读取换行符‘\n’的,
在第一行读取之后,输入缓存里就残留了一个‘\n’。
数组第二行第一个字符a[1][0]读的是上一行残留的‘\n’,这样就错位了,循环次数是固定的,每行多一个‘\n’,最后一行的输入就不会读取了

可以用getchar() 把每行的‘\n’读取掉即可
你题目的解答代码如下:

#include<iostream>
using namespace std;
int main()
{
    int n;
    cin >> n;
    char a[n+5][n+5];
    for (int i = 0; i <= n - 1; i++)
    {
        getchar(); //用getchar() 把每行的‘\n’读取掉
        for (int j = 0; j <= n - 1; j++)
        {
            scanf("%c", &a[i][j]);
        }
    }
    for (int k = 0; k < n ; k++)
    {
        for(int m = 0 ; m < n ; m++){
            cout << a[k][m];
        }
        cout << endl; //输出时再把每行的‘\n’加上
    }
    return 0;
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img