繁体   English   中英

将 txt 文件读取到 plot 图形(c++)

[英]Reading a txt file to plot a graph (c++)

我是 c++ 的新手。 我想用 c++ 阅读 this.txt 文件和 plot 。 我有一系列看起来像这样的数据。

4.299999989e+001    -3.682989627e-002   -3.635308705e-003   5.932495371e-002
4.300000089e+001    -2.672462724e-002   -7.527103298e-004   7.454365492e-002
4.300000189e+001    -6.389028858e-003   3.274697345e-003    5.433369055e-002
4.300000289e+001    1.632947288e-002    5.136939231e-003    3.248876333e-002
4.300000389e+001    3.278360888e-002    5.786722526e-003    -1.292655012e-003
4.300000489e+001    3.676251322e-002    3.845411120e-003    -2.506720088e-002

我已经使用 fstream 打开并阅读它。 但是我收到关于 memory 问题的错误。

我的代码看起来像这样

#include <iostream>
#include <fstream>
using namespace std;

int main(){
char line[50];
fstream file;
file.open ("C\\Users\\Zhi Sheng\\Desktop\\Data\\example.txt", ios::in );
file.getline(line,50);
cout << line;
file.close();
return 0;
}

我可以知道它出了什么问题吗?

原因可能是,除非看到\0字符,否则cout会尝试读取字符。 但是,对于您的示例,最后一个字节不会设置为 0 (意味着最后一个字符不会是\0 )并且它将用完数组。 尝试将缓冲区的大小至少增加一并将最后一个字符设置为\0

编辑

对于您的特定情况,如果您想将数据读取为数字(而不是字符串),请尝试在双精度数上使用operator >>

double value;
my_stream >> value;

这将尝试将下一个双精度值获取到value变量中。

你有一个C\而不是C:\ 你的路径应该是C:\\Users\\Zhi Sheng\\Desktop\\Data\\example.txt

我重新安排了你的代码(添加变量来保存文件名,检查文件是否成功打开, using namespace std删除 - 这就是原因: https://www.geeksforgeeks.org/using-namespace-std-considered- bad-practice/ ),但它的工作原理相同:

#include <iostream>
#include <fstream>

int main()
{
    char line[50];
    std::fstream file;
    std::string fileName = "C:\\Users\\Zhi Sheng\\Desktop\\Data\\example.txt";
    file.open(fileName, std::ios::in);
    if (file.is_open()) {
        while (file.getline(line, 50)) {
            std::cout << line;
        }
    }
    file.close();
    return 0;
}

但是,此代码还有其他问题,例如, line缓冲区对于整行来说太小,有些行是 76 个字符长,而这个缓冲区是 50 个字符长。

由于您在 C++ 而不是 C 中,因此您可以使用std::string类型而不是char line[50]完全绕过这种情况。 我还在写出该行的代码中添加了<< std::endl end-of-line,以便您获得格式良好的 output:

#include <iostream>
#include <fstream>
#include <string>

int main() {
    std::fstream file;
    std::string line, fileName = "C:\\Users\\Zhi Sheng\\Desktop\\Data\\example.txt";
    file.open(fileName, std::ios::in);
    if (file.is_open())
    {
        while (getline(file, line))
            std::cout << line << std::endl;
    }
    file.close();
    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM