如何使用iofstream将函数的输出写入文件?

时间:2017-02-02 20:02:38

标签: c++

我正在完成一项任务:

  1. 提示用户输入不少于1582的年份。

  2. 生成一个文件(cal.dat),其中包含我编写的代码生成的日历。

  3. 我编写了接受输入的代码,计算它是否为闰年,然后使用cout返回该年的日历。

    当我尝试将日历输出到文件时,Xcode在编译时给出了这个错误:

    Invalid operands to binary expression ('ofstream' (aka 'basic_ofstream<char>') and 'void')
    

    部分代码如下:

    #include <iostream>
    #include <iomanip>
    #include <fstream>
    
    using namespace std;
    
    void PrintMonth(int year, bool leap);
    ofstream calendar("cal.dat"); 
    
    int main()
    {
        // Setting up the parameters for the PrintMonth function
        int year=0;
        bool leap=false;
    
        // Input for the year
        cout << "Enter a 4 digit year: ";
        cin >> year;
    
        // Loop for an incorrect entry
        while (year<1582)
            {
            cout << "Year too low, please re-enter: ";
            cin >> year;
            }
    
        // Calculate if the input year is a leap year or not
        if ((year%4==0 && year%100!=0) || year%400==0)
            leap=true;
    
        // Output the year and the calendar for the year requested
        calendar << setw(15) << year << endl << endl;
        calendar << PrintMonth(year, leap);
    
        return 0;
    }
    

1 个答案:

答案 0 :(得分:1)

你写calendar << PrintMonth(year, leap),这意味着你将PrintMonth的返回值传递给calendar。 但是,根据签名void PrintMonth(int year, bool leap),此函数不会返回可以打印出来的值。 您的意思是PrintMonth(year,leap);而不是calendar << PrintMonth(year,leap)吗?

因此,您可以复制PrintMonth - 函数,将签名更改为void PrintMonth(int year, bool leap, std::ostream& out),调整其实现以写入out而不是cout,然后调用{{1}而不是写PrintMonth(year,leap, calendar);