我已经尝试了所有建议的方法来从单列文本文件中读取值。它们是 pos 和 neg 浮点值。我尝试过 boost、.atof()、.strtod()、get、getline、.push_back() 等等。我当前的代码将 0 分配给 cels。我尝试过的几乎所有其他函数都只给了我字符串 '\0' 并陷入了 while 循环。
如果你看一下程序的底部,我已经启动了 svg 来创建一个条形图。我需要能够找到最大值和最小值来创建比例因子,然后通过 svg 提供每个值。
我希望使用 .atof 或 getline ,因为它们似乎最有效。据我所知,不匹配的变量类型是一个问题。我为此付出了很多努力并重写了无数次。我想我很清楚我需要做什么,以及它应该如何工作,但我似乎无法把它们放在一起。我真的很感激任何帮助!
#include <iostream>
#include <fstream>
#include <sstream>
#include <istream>
#include <cstdlib>
#include <string>
#include <vector>
#include <cctype>
#include <cstdio>
using namespace std;
string html_start() { return("<!DOCTYPE html>\n<html>\n<body>\n\n"); }
string html_end() { return("\n</body>\n</html>\n\n"); }
string svg_start() { return("<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" viewBox=\"0 0 1024 768\" preserveAspectRatio=\"xMinYMid meet\" >\n"); }
string svg_end() { return("</svg>\n"); }
int main ()
{
ifstream infile ("parsableTemps.txt");
ofstream fout ("graph.html", std::ofstream::out);
double cels, fahr, maxnum = -50, minnum = 150;
int column = 10, width = 5;
string number;
//char c;
infile.open("parsableTemps.txt");
infile.is_open();
if (infile.is_open())
{
while (! infile.eof())
{
std::getline (infile,number);
//while (! isspace(c))
//{
// infile >> number;
//}
//cels = atof(number.c_str());
char *end;
//std::getline(infile, number);
//cout << number;
cels = strtod(number.c_str(), &end);
fahr = (9/5 * cels) + 32;
if (fahr > maxnum)
{
maxnum = fahr;
}
if (fahr < minnum)
{
minnum = fahr;
}
fout.open("graph.html");
fout << html_start();
fout << "<h1> AVERAGE TEMPERATURE </h1>\n";
fout << svg_start();
fout << " <rect x=\"" << column << "\" y=\"" << maxnum - fahr << "\" width=\"" << width << "\" height=\"" << fahr << "\" style=\"fill:rgb(255,0,0);stroke-width:1;stroke:rgb(0,0,0)\"/>\n";
column += width;
}
}
else
{
cout << "error";
}
//cout << maxnum << " " << minnum;
fout << svg_end();
fout << html_end();
fout.close();
infile.close();
return 0;
}