[英]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.