大家好,我试图用c ++中的文件读取。我是c ++的新手,但是从文件测试程序中练习一个简单的读取。我的程序编译但是当我从文件中读取时,它会在屏幕上显示一堆垃圾。以下是我的代码:
#include <iostream>
#include <fstream>
int main()
{
ifstream infile;
char File[20];
cout<<"Please enter file name: "<<endl;
cin>>File;
string sym;
double o_price, h_price, l_pprice, c_pprice, c_price;
int o_shares;
infile.open(File);
if(!infile.is_open())
{
cout<<"The file cannot be open"<<endl;
}
while(!infile.eof())
{
infile>>sym>>o_price>>c_price>>h_price>>l_pprice>>c_pprice>>o_shares;
cout<<sym<<o_price<<c_price<<h_price<<l_pprice<<c_pprice<<o_shares;
}
infile.close();
return 0;
}
我正在努力理解这个概念,但我需要帮助。 抱歉缺少语法。 输入文件包含: ABC 120.09 123.11 134.45 124.34 36.67 10000
以下是屏幕上显示的输出: P!?=·R {[CONTENT_TYPES] .xml000000e。
答案 0 :(得分:1)
您需要在使用之前定义或声明变量。
但是,在您的计划中,sym, o_price, h_price, l_pprice, c_pprice, o_shares
未定义或未声明。 Cpp是一种静态语言,你需要遵守规则。
答案 1 :(得分:0)
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream infile;
char File[20];
cout<<"Please enter file name: "<<endl;
cin>>File;
infile.open(File);
if(!infile.is_open())
{
cout<<"The file cannot be open"<<endl;
}
string sym;
double o_price, h_price, l_pprice, c_pprice;
int o_shares;
infile>>sym>>o_price>>h_price>>l_pprice>>c_pprice>>o_shares;
cout<<sym<<" "<<o_price<<" "<<h_price<<" "
<<l_pprice<<" "<< c_pprice<<" "<<o_shares<< endl;
infile.close();
return 0;
}
答案 2 :(得分:0)
尝试更改此内容:
if(!infile.is_open())
{
cout<<"The file cannot be open"<<endl;
}
到此:
if(!infile.is_open())
{
cout<<"The file cannot be open"<<endl;
return 0;
}
正如您现在所做的那样,检查文件是否已成功打开,但如果文件未成功打开,则只需继续使用您的程序即可。如果文件没有正确打开,你不想这样做,因为它将继续读取(失败)并永远打印垃圾值。
另外,这个:
while(!infile.eof())
不是正确的方法,因为你只有在尝试阅读文件末尾之后才能获得EOF ,所以它总是会尝试阅读(并且,在你的情况下,打印)比你想要的多一倍。