qq_32412545 晚上好🌙🌙🌙
本答案参考通义千问
问题分析:
从你的描述和代码来看,你想要按行输入字符数组 left
, right
, 和 result
,但实际输入时遇到的问题是,输入完成后没有自动换行,导致下一行的数据覆盖了上一行。这是因为当你使用 cin
逐个读取字符数组时,cin
会等待一个完整的输入(例如一个单词或一行)结束,而不是单个字符。
解决方案:
为了解决这个问题,你可以使用 getline
函数来按行读取输入,这样可以确保每一行数据都被正确接收,并且在输入完成后换行。以下是修改后的代码:
#include<iostream>
using namespace std;
int main()
{
int times;
cin >> times;
// 使用 getline 改进输入
char left[3][8];
char right[3][8];
char result[3][8];
for (int i = 0; i < times; i++) {
for (int j = 0; j < 3; j++) {
string temp_left, temp_right, temp_result;
getline(cin, temp_left, ' '); // 读取 left
getline(cin, temp_right, ' '); // 读取 right
getline(cin, temp_result); // 读取 result
// 将字符串转换为字符数组
for (size_t k = 0; k < temp_left.size(); k++) {
left[i][j * 4 + k] = temp_left[k];
}
for (size_t k = 0; k < temp_right.size(); k++) {
right[i][j * 4 + k] = temp_right[k];
}
for (size_t k = 0; k < temp_result.size(); k++) {
result[i][j * 4 + k] = temp_result[k];
}
}
}
// 输出部分保持不变
for (int i = 0; i < times; i++) {
for (int j = 0; j < 3; j++) {
cout << left[i][j * 4] << left[i][j * 4 + 1] << left[i][j * 4 + 2] << left[i][j * 4 + 3] << endl;
cout << right[i][j * 4] << right[i][j * 4 + 1] << right[i][j * 4 + 2] << right[i][j * 4 + 3] << endl;
cout << result[i][j * 4] << result[i][j * 4 + 1] << result[i][j * 4 + 2] << result[i][j * 4 + 3] << endl;
}
}
return 0;
}
现在,输入时会正确地换行,每个数组都在新的一行。请注意,这里假设每个字符数组最多包含 4 个字符,如果可能有不同的长度,你需要相应调整数组大小和索引。