Dr尼古拉斯刘 2024-02-28 21:57 采纳率: 50%
浏览 4
已结题

【求解答一个疑问】关于字符型数组的输入输出问题

关于字符型数组的输入输出问题
我想要按行输入字符数组,
cin>>left[i]>>right[i]>>result[i];
当我输入样例时它出现了只有空格时才会停止输入上个数组,而回车时却不会跳转到下一个数组
样例:
1
ABCD EFGH even
ABCI EFJK up
ABIJ EFGH even

img

为什么上图中红框所标注的地方并没有换行?
求友友们帮忙看看,感谢!
下面是我的代码

#include<iostream>
using namespace std;
int main()
{
    int times;
    cin>>times;
    char right[3][8];
    char left [3][8];
    char result[3][8];
    while(times--)
    {
        for(int i=0;i<3;i++)
        {
            cin>>left[i]>>right[i]>>result[i];
        }
        for(int i=0;i<3;i++)
        {
            cout<<left[i]<<endl<<right[i]<<endl<<result[i];
        }
    }
}

  • 写回答

1条回答 默认 最新

  • 关注

    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 个字符,如果可能有不同的长度,你需要相应调整数组大小和索引。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月28日
  • 创建了问题 2月28日

悬赏问题

  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境