【问题标题】:c++ ofstream file only displaying last line after while loopc ++ ofstream文件仅在while循环后显示最后一行
【发布时间】:2016-03-18 08:26:02
【问题描述】:

我的几个编码任务遇到了很多麻烦,希望有人能引导我朝着正确的方向前进。如果这个问题发布在其他地方,我提前道歉。我真的不知道如何表达这个问题以找到类似的东西。问题是我试图通过几个布尔函数从 .txt 文件中运行一些数字,这些函数会将结果输出到另一个 .txt 文件。我遇到的问题是它只是输出到输出文件的最后一行。我试着向我的教授询问这件事,但他无法和我一起解决(这让我很沮丧)。

这是我的代码,我上传了一张图片来显示创建的文本文件。

如果 (!inFile) {

        cout << "error opening file\n";
    }
    else
    {
        while (inFile) {
            (inFile >> hour >> min);
            (cout << hour << ":" << min << endl);
            bool validate_hour(hour);
            bool validate_minute(min);
            inFile.ignore(1);
        }

            outFile.open("time_Validation.txt", ios::out | ios::app);

            if (validate_hour(hour) == true && validate_minute(min) == true) {
                outFile << hour << ":" << min << " hour is valid and minute is valid\n";
            }

            else if (validate_hour(hour) == false && validate_minute(min) == true) {
                outFile << hour << ":" << min << " hour is invalid and minute is valid\n";
            }

            else if (validate_hour(hour) == true && validate_minute(min) == false)
            {
                outFile << hour << ":" << min << " hour is valid and minute is invalid\n";
            }

            else if (validate_hour(hour) == false && validate_minute(min) == false)
            {
                outFile << hour << ":" << min << " hour is invalid and minute is invalid\n";
            }

    outFile.close();

This is what I'm getting. There should be a line for each of those pairs of numbers displayed in the time_validation.txt file.

感谢您为完成本实验提供的任何帮助。感谢您的关注。

感谢大家的意见。我按照建议更改了while(inFile) to while (inFile &gt;&gt; hour &gt;&gt; min)。显然,我需要更多地练习 while 循环。再次感谢所有给我建议的人,这对我的代码完成很有帮助。

【问题讨论】:

  • 你的代码看起来……很奇怪。为什么将输入和输出放在括号中?为什么要在循环中声明函数原型?谈论循环,不要做例如while(inFile) 或 while (!inFile.eof()) 因为它很少按预期工作。而是做while (inFile &gt;&gt; hour &gt;&gt; min)。另请注意,在读取数字或字符串时,输入运算符 &gt;&gt; 会跳过前导空格(包括换行符),因此很可能不需要 ignore 调用。
  • 您的while() 循环甚至在打开输出文件之前就处理了整个输入文件。然后它只是使用从输入文件中读取的最后一个值,重新验证它们。您可能希望将输出代码 inside 您的 while() 循环。

标签: c++ function ofstream


【解决方案1】:
 outfile.open("time_validation.txt",ios::out | ios::app);
    while(!infile)
        cout << "file does not exist" << endl;
    while(infile)
    {
        infile >> hour >> min;
        if(validate_hour(hour))
            outfile << hour << " hour is valid ";
        else
            outfile << hour << " hour is invalid ";
        if(validate_minute(minute))
            outfile << minute << " minute is valid \n";
        else
            outfile << minute << " minute is invalid \n";
    }

这样的东西应该可以工作,因为你没有发布完整的代码,我不知道程序在文件中写入了多少次,据我所知,你在验证所有文件后只向文件输出一次输入,而您应该为每个输入循环将输出提供给文件。

【讨论】:

    猜你喜欢
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    • 2018-04-01
    • 1970-01-01
    • 2015-04-26
    • 1970-01-01
    相关资源
    最近更新 更多