C++中从txt文件阅读浮点数

cwtwac6a  于 2023-01-28  发布在  其他
关注(0)|答案(2)|浏览(232)

我正在尝试从一个C++的txt文件中读取(x,y)浮点值。数字之间用空格分隔。第i个数字和第i+1个数字构成(x,y)坐标。因此,索引位置01将是第一个(x,y)对,索引位置(1,2)将是下一个(x,y)对。
这是我所做的,但我不知道如何才能保存它们作为浮动。

ifstream randomFile;
string content;
randomFile.open("random.txt");
if(randomFile.is_open()) {
    while(getline(randomFile,content)){
        randomFile >> content;
    }
    randomFile.close();
}
66bbxpm5

66bbxpm51#

读取第一个浮点数x
当附加读取y成功时:
将(x,y)添加到列表中
x = y

#include <iostream>
#include <vector>

struct xy
{
  float x, y;
  xy( float x, float y ) : x{x}, y{y} { }
};

auto read_xy_pairs( std::istream & ins )
{
  std::vector<xy> xys;
  float x, y;
  ins >> x;
  while (ins >> y)
  {
    xys.emplace_back( x, y );
    x = y;
  }
  return xys;
}

#include <sstream>
#include <string>

int main()
{
  std::cout << "list of numbers? ";
  std::string s;
  getline( std::cin, s );
  std::istringstream numbers( s );
  
  for (auto [x, y] : read_xy_pairs( numbers )) 
    std::cout << "(" << x << ", " << y << ")\n";
}

示例:

list of numbers? 1 2 3 4 5
(1, 2)
(2, 3)
(3, 4)
(4, 5)
mctunoxg

mctunoxg2#

一个额外的变量(prev)可以用来存储上次输入的值,并在每次迭代时将(prevcurr)追加到存储容器中。在下面的代码中,我使用了浮点数对的向量来存储浮点数对,但也可以使用数组或结构。

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

int main() {
    //Declaring vector of float pairs
    vector <pair<float, float>> floatPairs;
    ifstream randomFile;
    float curr, prev;

    randomFile.open("a.txt");
    randomFile >> curr;
    while (!randomFile.eof()) {
        prev = curr;
        randomFile >> curr;

        //Appending to vector of float pairs
        floatPairs.push_back({ prev,curr });
    }

    //Printing
    for (auto i : floatPairs) {
        cout << "(" << i.first << ", " << i.second << ")\n";
    }
}

输入文件内容:12.5 56.8 34.7 75.7 23.4 86.7 34.9 66.8
输出:

(12.5, 56.8)
(56.8, 34.7)
(34.7, 75.7)
(75.7, 23.4)
(23.4, 86.7)
(86.7, 34.9)
(34.9, 66.8)

相关问题