你的代码有一个小问题,可能会导致输入读取不正确。具体来说,在读取 n 和 m 之后,使用 getline 来读取每一行数据时,可能会遇到一个问题:cin >> n >> m; 之后,输入缓冲区中可能还残留一个换行符,这会导致第一次调用 getline 时读取到一个空行。
为了解决这个问题,你可以在读取 n 和 m 之后,添加一个额外的 getline 调用,以消耗掉这个换行符。以下是修正后的代码:
cpp
include <bits/stdc++.h>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
cin.ignore(); // 忽略掉 cin >> n >> m 后的换行符
vector<vector<int>> jiang(n, vector<int>(m, 0));
for (int i = 0; i < n; ++i) {
string a;
getline(cin, a);
for (int h = 0; h < m; h++) {
jiang[i][h] = a[h] - '0'; // 假设输入是数字字符,需要转换为整数
}
}
// 输出矩阵以验证输入
for (int i = 0; i < n; ++i) {
for (int h = 0; h < m; h++) {
cout << jiang[i][h] << " ";
}
cout << endl;
}
return 0;
}
在这个修正后的版本中,cin.ignore(); 用于忽略掉 cin >> n >> m; 之后的换行符。这样可以确保 getline 正确读取每一行的数据。
另外,注意到 jiang[i][h] = a[h]; 这一行,如果输入是字符(例如 ‘0’, ‘1’, ‘2’, …),并且你希望将其转换为整数,你需要减去字符 '0',即 jiang[i][h] = a[h] - '0';。如果输入已经是整数而不是字符,这一步就不需要。
两个问题,要记住