gpt4 book ai didi

c++ - 如何使用 C++ 将 ASCII 文件的特定列存储(或转换)为数组?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:23:20 26 4
gpt4 key购买 nike

我是 C++ 新手。

我得到了一个 3 列 143 行的 ASCII 文件。第一列有整数,而其余两列有 float 。

目标:将单独的三列存储到三个大小为 143 的数组中,每个数组。

问题:用cout打印时,最后一行重复,不知道为什么。

ASCII 文件示例:

2   41.3    25
2 46.2 30
2 51.5 40
2 56.7 45
3 49.5 525
3 46.2 450
3 54.0 575
3 59.5 650
5 36.0 500
5 39.0 525
5 31.8 480
5 36.4 520

还有我的代码:

void my_code()
{
FILE *pfile;
int ball[150];
float energy[150], channel[150];
int ball1[150], i=0;
float energy1[150], channel1[150];
pfile = fopen("./ascii.txt","r");
if (!pfile) continue;
while(!feof(pfile))
{
fscanf(pfile,"%d\t%f\t%f",&ball[0],&energy[0],&channel[0]);
ball1[i]=ball[0];
energy1[i]=energy[0];
channel1[i]=channel[0];
cout<<i<<"\n";
cout<<ball1[i]<<" "<<" "<<energy1[i]<<" "<<channel1[i]<<"\n";
i++;
}
}

请帮助我理解。我也愿意获得改进我的代码的建议/忠告。

最佳答案

首先,您的代码将不会被编译,因为在循环外使用 continue 语句是无效的。

if (!pfile) continue;

所以我想知道为什么你的代码被编译了。至于重复文件最后一行的值,这是由于在循环的下一次迭代期间,下一行的读取已完成,状态为 EOF 和 ball[0]、energy[0] 的值,以及 channel [0] 没有改变。他们保持以前的值(value)观。

如果您只使用数组 ball[0]、energy[0] 和 channel[0],那么声明数组也没有任何意义。

还不清楚为什么要混淆 C++ 和 C 代码。事实上,该函数除了输出从文件中提取的值外什么都不做。所以定义数组没有任何意义。

我的代码会做同样的事情看起来像下面的方式

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

//...

void my_code()
{
std::ifstream file( "./ascii.txt" );

std::string line;

while ( std::getline( file, line ) )
{
std::istringstream is( line );
int v1;
float v2, v3;

if ( is >> v1 )
{
std::cout << v1;
if ( is >> v2 )
{
std::cout << ' ' << v2;
if ( is >> v3 )
{
std::cout << ' ' << v3;
}
}
std::cout << std::endl;
}
}
}

如果你需要arraya那么代码可以看起来像

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

//...

void my_code()
{
const size_t N = 143;
int ball[N] = {};
float energy[N] = {};
float channel[N] = {};

std::ifstream file( "./ascii.txt" );

std::string line;

size_t i = 0;
while ( i < N && std::getline( file, line ) )
{
std::istringstream is( line );

if ( is >> ball[i] )
{
std::cout << ball[i];
if ( is >> energy[i] )
{
std::cout << ' ' << energy[i];
if ( is >> channel[i] )
{
std::cout << ' ' << channel[i];
}
}
std::cout << std::endl;
}
}
}

关于c++ - 如何使用 C++ 将 ASCII 文件的特定列存储(或转换)为数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22743997/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com