不知名的网友.ᥫᩣ༠ 2024-04-14 20:13 采纳率: 95.7%
浏览 26
已结题

C++getline不能用

img


Ofs是文件名,为什么会出错不通过?
Ofs是文件名,为什么会出错不通过?
Ofs是文件名,为什么会出错不通过?

  • 写回答

1条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-04-14 20:13
    关注

    引自免费微信小程序:皆我百晓生

    在您的代码片段中,getline() 函数可能会导致错误,因为它试图从一个已经指定了读写模式的文件流中读取数据。在这种情况下,您应该为输入操作创建一个新的文件流对象,而不是尝试在一个已经打开为读写的文件流上进行读取。

    下面是修改后的代码示例:

    #include <iostream>
    #include <fstream>
    #include <string>
    
    std::string filename;
    std::ifstream ifs;
    
    // 查看机房预约信息
    void guanliyuan::showcom() {
        if (type == 2) {
            filename = "TEACHER_FILE";
            // 创建一个新的ifstream对象用于读取
            ifs.open(filename, std::ios::in);
    
            if (!ifs.is_open()) {
                std::cerr << "Error opening file: " << filename << std::endl;
                return; // 或者处理错误的其他方式
            }
    
            std::string fname;
            std::string ftip;
            getline(ifs, fname);
            getline(ifs, ftip);
    
            std::cout << "<- " << fname << " " << ftip << std::endl;
    
            ifs.close();
        }
    }
    

    这里的主要更改包括:

    1. 将文件名存储在一个单独的变量 filename 中。
    2. 使用 std::ifstream 类型的新对象 ifs 来打开文件,并只指定读取模式(std::ios::in)。
    3. 检查 ifs.is_open() 是否返回 true,这将确认文件是否成功打开。
    4. 分别对 fnameftip 调用两次 getline(),因为您想要读取两行。
    5. 在完成读取后关闭文件流 ifs.close();

    这段代码应该能解决您遇到的问题,让 getline() 正常工作。如果还有其他错误,请提供更详细的错误消息,以便我能更好地帮助您。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 4月22日
  • 已采纳回答 4月14日
  • 创建了问题 4月14日