错误

你的代码有一个小问题,可能会导致输入读取不正确。具体来说,在读取 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';。如果输入已经是整数而不是字符,这一步就不需要。
两个问题,要记住

posted @ 2024-11-14 13:27  ghostyu1  阅读(37)  评论(0)    收藏  举报