用C ++写出文件

时间:2013-12-20 08:18:06

标签: c++ file-io

这是我的代码:

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

int main()

{

string fname,lname;
double pincrease //pay increase percentage,pay;
ifstream infile;
ofstream outfile;

infile.open("C:\\Users\\Connor\\Desktop");
outfile.open("C:\\Users\\Connor\\Desktop");

while(!infile.eof())
{
    infile>>lname>>fname>>pay>>pincrease;
    pay = pay*(pay*pincrease);
    outfile<<fname<<" "<<lname<<" "<<pay<<"\n";
    cin.clear();
}

infile.close();
outfile.close();

}

以下是我infile的内容:

Miller Andrew 65789.87 5
Green Sheila 75892.56 6
Sethi Amit 74900.50 6.1

信息的格式为Last Name:First Name:Pay:Pay Increase Percentage

当我写入outfile时,第一个和最后一个名字的订单交换以及支付百分比增加的排除是故意的。

我正在尝试阅读infile的内容,修改它们,然后将其写入outfile

然而,当我执行代码时,我开始我非常肯定是一个无限循环,但我不确定如何解决它。

2 个答案:

答案 0 :(得分:2)

这些陈述都不可能打开文件:

infile.open("C:\\Users\\Connor\\Desktop");
outfile.open("C:\\Users\\Connor\\Desktop");

相反,他们尝试(可能会失败)打开您的桌面文件夹。相反,你可能想要更像的东西:

infile.open("C:\\Users\\Connor\\Desktop\\infile");
outfile.open("C:\\Users\\Connor\\Desktop\\outfile");

当然,infileoutfile最后应该替换为实际的文件名。

您可以通过选中infile.is_open()outfile.is_open()来测试您的文件是否成功打开。您可以添加显式if语句来测试它:

if (!infile.is_open())
    // report/handle that you couldn't open input file

if (!outfile.is_open())
    // report/handle that you couldn't open output file

对于主循环,您不应该像对待eof那样进行测试。相反,使用这样的东西:

while(infile>>lname>>fname>>pay>>pincrease)
{
    pay = pay*(pay*pincrease);
    outfile<<fname<<" "<<lname<<" "<<pay<<"\n";
    cin.clear();
}

以您的方式测试EOF将尝试读取超出文件末尾的一条额外记录。

EOF标志仅在读取尝试失败后才会设置。因此,您应该在尝试阅读后始终测试EOF。

标准ifstream的设置方式是典型的ifstream输入操作(即infile >> item)将返回对ifstream对象的引用。这就是你可以做infile >> item1 >> item2 >> item3之类的事情。

当你将它放在循环控件的上下文中时(如上所述),ifstream具有适当的运算符重载,导致它根据是否读取来告诉while是否保持循环成功了。

其他人已经解释过,其他地方的超载魔法还不错。有关循环终止魔法的更多信息,请访问:Why istream object can be used as a bool expression?

答案 1 :(得分:1)

替换此

infile.open("C:\\Users\\Connor\\Desktop");
outfile.open("C:\\Users\\Connor\\Desktop");

用这个

infile.open("C:\\Users\\Connor\\infile.txt");
outfile.open("C:\\Users\\Connor\\outfile.txt");

您发布的代码无法编译,原因有两个。一,变量pay尚未声明,两个,您已注释掉以下代码的终止。

double pincrease //pay increase percentage,pay;

尝试以下代码。希望它有所帮助

            int main()

            {

                string fname,lname;
                double pincrease; //pay increase percentage,pay;
                double pay;
                ifstream infile;
                ofstream outfile;

                infile.open("C:\\Users\\Connor\\infile.txt");
                outfile.open("C:\\Users\\Connor\\outfile.txt");

                while(!infile.eof())
                {
                    infile>>lname>>fname>>pay>>pincrease;
                    pay = pay*(pay*pincrease);
                    outfile<<std::setprecision(2)<<std::showpoint << std::fixed;;
                    outfile<<fname<<" "<<lname<<" "<<pay<<"\n";
                    cin.clear();
                }

                infile.close();
                outfile.close();

            }