我试图在我的方法“加载”中读取文件。这个文件是这样的:
3
3 Futech tablet 2 7.95
1 El_general_en_su_laberinto Gabriel_García_Márquez 23.50
2 Carne_picada 1 4.56
第一行是项目数,我的方法应加载并打印如下内容:
3 Futech tablet 2 7.95
这是我的方法加载
的类 #include "ItemProccesor.h"
#include<string>
#include<iostream>
#include<fstream>
#include <stdlib.h>
using namespace std;
ItemProcessor::ItemProcessor() {
// TODO Auto-generated constructor stub
}
ItemProcessor::~ItemProcessor() {
// TODO Auto-generated destructor stub
}
void ItemProcessor::load(string archivo){
int tam;
int tipo;
int cant;
string cad1;
string cad2;
float precio;
ifstream myfile;
myfile.open(archivo.c_str());
if (myfile.is_open()){
myfile >> tam;
for(int n= 0; n < tam; n++) {
myfile >> tipo;
cout << tipo << cad1;
}
}
myfile.close();
}
其实我的方法打印:
333
就像总是采取相同的路线。这是我的主要方法:
#include <iostream>
#include <string>
#include "ItemProccesor.h"
int main(int argc, char **argv) {
ItemProcessor *processor = new ItemProcessor();
processor->load("lista.txt");
}
¿我怎么能去下一行?
答案 0 :(得分:2)
不确定这是否是唯一的问题,但您已阅读tipo
两次。尝试替换
myfile >> tipo >> cad1 >> cad2 >> cant >> precio;
与
myfile >> cad1 >> cad2 >> cant >> precio;
答案 1 :(得分:1)
您的输入文件似乎搞砸了。有时一行有四列,有时五列,有时三列。
这使得阅读非常难!
如果无法修复文件,则必须一次读取每一行,然后使用标记生成器在空格处拆分行,以便在处理行之前计算每行中的列数。
答案 2 :(得分:1)
你的方法正在打印333,因为只是你没有遍历这些行。
void ItemProcessor::load(string archivo){
int cant;
float precio;
string tipo, cad1, cad2, line;
ifstream myfile(archivo.c_str());
if(myfile.is_open())
{
while(getline(myfile,line))
{
myfile >> tipo >> cad1 >> cad2 >> cant >> precio;
cout << tipo << " "<< cad1 <<" "<< cad2 <<" "<<cant <<" "<< precio << endl;
}
}
else
cout <<"error " << endl;
myfile.close();
}
3 Futech tablet 2 7.95
1 El_general_en_su_laberinto Gabriel_García_Márquez 23 0.50
2 Carne_picada 1 4.56
有趣的是,它将 23.50 转换为 23 0.50 。不知道为什么但是很好的lolololol。至少它有效。