cin.get getline 会被开头的换行卡住,此时可以用cin.ignore解决。
在
#include<iostream>
using namespace std;
int main()
{
int matri[10][10] = {};
int R = 0, C = 0;
cin >> R >> C;
char mess[51] = {};
int tran[100] = {};
int temp;
cin.ignore();
cin.get(mess, 51);
for (int i = 0; i < 51; i++)
{
if (mess[i] == ' ')
{
tran[2 * i] = 0; tran[2 * i + 1] = 0;
}
else if (mess[i] > 64 && mess[i] < 91)
{
temp = mess[i] - 64;
tran[2 * i] = temp / 10;
tran[2 * i + 1] = temp % 10;
}
}
int r = (R - 1) / 2, c = (C - 1) / 2;
int min = 0;
if (r > c)
min = c;
else
min = r;
int i = 0, j = 0;
int s = 0;
int z = 0;
while(z <= min)
{
matri[i][j] = tran[s];
if (i == z ||(i<R-1-z&& j == C - 1 - z))
{
if (i == z&& j < C - z - 1)
j++;
else if (i < R - 1 - z && j == C - 1 - z)
i++;
}
else if (i == R - 1 - z || j == z)
{
if (i == R - 1 - z && j > z)
j--;
else if (i == R - 1 - z && j == C - 1 - z)
j--;
else if (i > z && j == z)
i--;
}
s++;
if (s ==(z+1)*( 2*R+2*C-4-4*z)||s==R*C)
{
z++;
i = z;
j = z;
}
}
在if的嵌套中,如果进入了第一个if,即便里面有判断未进行修改,也会使进不去第二个else if。
将字符串输入字符数组的时候需要多预留一个空位以免\0占掉最后一个字符。