从零开始写代码 2023-10-15 20:56 采纳率: 69.2%
浏览 111
已结题

如何从文件中读取字符串?为什么getline函数用不了?

先放问题

img

再看源码


```c++
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>
#include <iostream>
#include <sstream>
using namespace std;

int main()
{
    FILE* fp;
    char* ch;
    if ((fp = fopen("01111111111111.txt", "r")) == NULL)
    {
        printf("读取失败!\n");
        exit(0);
    }
    while (getline(fp,ch))
        printf("%s", ch);
    fclose(fp);//关闭文件
    printf("\n");
    system("pause");
}

这是需要读取的文件

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/422656473796192.png "#left")
很奇怪,头文件都有但是为什么不能识别getline函数呢?
  • 写回答

3条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-17 11:18
    关注

    【以下回答由 GPT 生成】

    问题的原因是getline函数不是C语言标准库中的函数,而是C++标准库中的函数。所以在使用getline函数时,需要将代码改为C++代码。

    以下是一个使用C++标准库中的ifstream类来实现从文件中读取字符串的示例代码:

    #include <fstream>
    #include <iostream>
    #include <string>
    
    int main()
    {
        std::ifstream file("01111111111111.txt"); // 打开文件
        if (!file.is_open())
        {
            std::cout << "读取失败!" << std::endl;
            return 0;
        }
    
        std::string line;
        while (std::getline(file, line)) // 逐行读取文件内容
        {
            std::cout << line << std::endl; // 输出每一行的内容
        }
    
        file.close(); // 关闭文件
        system("pause");
        return 0;
    }
    

    这段代码使用了ifstream类来打开文件,并使用getline函数逐行读取文件内容。其中,getline函数会将读取到的每一行保存到line变量中,然后通过cout对象输出到屏幕上。

    请注意,这段代码是使用C++来编写的,所以使用了C++标准库中的头文件。如果要在C语言中实现相同的功能,可能需要使用其他的方法,比如使用C语言中的fgets函数来逐行读取文件内容。

    代码优化:

    如果你想要将文件的内容一次性读取到一个字符串中,可以使用std::stringassign函数来实现。以下是相应的代码示例:

    #include <fstream>
    #include <iostream>
    #include <string>
    
    int main()
    {
        std::ifstream file("01111111111111.txt"); // 打开文件
        if (!file.is_open())
        {
            std::cout << "读取失败!" << std::endl;
            return 0;
        }
    
        std::string content;
        std::string line;
        while (std::getline(file, line)) // 逐行读取文件内容
        {
            content += line + '\n'; // 将每一行内容拼接到字符串末尾,并加上换行符
        }
    
        std::cout << content << std::endl; // 输出整个文件的内容
    
        file.close(); // 关闭文件
        system("pause");
        return 0;
    }
    

    这段代码使用了一个content字符串来存储整个文件的内容。在循环中,将每一行的内容拼接到content字符串的末尾,并加上一个换行符。循环结束后,将整个content字符串输出到屏幕上。

    希望以上解决方案对你有帮助。如果你还有其他问题,请随时提问。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月23日
  • 已采纳回答 10月23日
  • 修改了问题 10月15日
  • 创建了问题 10月15日