我需要在此代码中包含4个带参数的函数,但我终生无法想到一种合并任何具有参数的方法的方法。 函数参数不是通常与整数一起使用来进行计算吗? 我可以为此代码创建的函数的一些示例? 如果这很容易,请原谅我,因为我还很新。

#include <iostream>
#include <fstream>
#include <iomanip>

using namespace std;

ofstream outFile;
ifstream inFile;

const int MAXCHAR = 101;
const int MAXLINE = 256;



struct task
{
    char course[MAXCHAR];
    char desc[MAXCHAR];
    char date[MAXCHAR];
};

int main()
{

    task track[MAXLINE];
    bool quit = false;
    while (quit == false)
    {

        char choice;
        cout << "Welcome to my Task List: \n";
        cout << "<a> to add task\n";
        cout << "<s> to show the task list\n";
        cout << "<f> to find a task by course name\n";
        cout << "<q> to quit\n";
        cin >> choice;
        cin.ignore(100, '\n');

        if (choice == 'a' || choice == 'A')
        {
            int count = 0;
            outFile.open("tasks.txt", fstream::app);

            cout << "Enter Course Name (less than 101 characters): ";
            cin.get(track[count].course, MAXCHAR, '\n');
            cin.clear();
            cin.ignore(100, '\n');

            cout << "Enter Task Description (less than 101 characters): ";
            cin.get(track[count].desc, MAXCHAR, '\n');
            cin.clear();
            cin.ignore(100, '\n');

            cout << "Enter due date (mm/dd/yyyy): ";
            cin.get(track[count].date, MAXCHAR, '\n');
            cin.clear();
            cin.ignore(100, '\n');

            char confirm;
            cout << "\nAre you sure you want to add " << track[count].course << ";" << track[count].desc << ";" 
                 << track[count].date << "? (y/n)";
            cin >> confirm;
            if (confirm == 'y' || confirm == 'Y')
            {
                cin.clear();
                cin.ignore(100, '\n');
                outFile << track[count].course << ";" << track[count].desc << ";" << track[count].date << "\n";
                cout << "Task has been added\n";
                count++;
            }
            else if (confirm == 'n' || confirm == 'N')
            {
                cin.clear();
                cin.ignore(100, '\n');
            }
            outFile.close();
        }
        else if (choice == 's' || choice == 'S')
        {
            int count = 0;
            inFile.open("tasks.txt");

            while (inFile)
            {
                inFile.getline(track[count].course, MAXLINE, ';');
                inFile.getline(track[count].desc, MAXLINE, ';');
                inFile.getline(track[count].date, MAXLINE, '\n');
                if (inFile)
                {
                    cout << track[count].course << ";" << track[count].desc << ";" 
                         << track[count].date << "\n";
                    count++;
                }
            }

            inFile.close();
            cin.clear();

        }

        else if (choice == 'f' || choice == 'F')
        {
        int count = 0;
            char course[MAXCHAR];
            cout << "Enter Course Name: ";
            cin >> course;

            inFile.open("tasks.txt");
            while (inFile)
            {
                inFile.getline(track[count].course, MAXLINE, ';');
                inFile.getline(track[count].desc, MAXLINE, ';');
                inFile.getline(track[count].date, MAXLINE, '\n');
                if (strcmp(track[count].course, course) == 0)
                {
                    cout << track[count].course <<  ";" << track[count].desc 
                         << track[count].date << "\n";

                    count++;
                }


            }
            inFile.close();

        }
        else if (choice == 'q' || choice == 'Q')
        {
            quit = true;
        }

    }

}

===============>>#1 票数:0

方法的重点是通过多种方式来对代码进行分段,以便于阅读。 考虑一下代码中可能包含的部分,然后将其分成各自的功能。

您的代码的一个基本示例可能是:

if (choice == 'a' || choice == 'A')
   DoStuff_a(<params>);
else if (choice == 's' || choice == 'S')
   DoStuff_s(<params>);    

        //...

else if (choice == 'f' || choice == 'F')
   DoStuff_f(<params>);  
else if (choice == 'q' || choice == 'Q')
   quit = true;

有许多方法来隔离您的代码(例如, GetInput() GetFileData()等) -在这一个相当不错的讨论,可以在这里找到 只要记住函数设计(a)在很大程度上取决于个人喜好,并且(b) 即使对于main()应考虑!

许多开发人员坚信main()应该是95%+的函数调用 ,并且几乎没有“工人代码”。

===============>>#2 票数:0 已采纳

您对“ a”和“ A”,“ s”和“ S”,“ f”和“ F”的情况没有太多共同之处。 因此,我认为您不能编写一个函数将所有功能合并到一个功能中,然后根据参数执行操作。 但是,可以通过将所有3种不同的情况包含在一个不带参数并返回void的函数中,使代码更具可读性:

void Case_s_S()
{
    int count = 0;
    inFile.open("tasks.txt");

    while (inFile)
    {
        inFile.getline(track[count].course, MAXLINE, ';');
        inFile.getline(track[count].desc, MAXLINE, ';');
        inFile.getline(track[count].date, MAXLINE, '\n');
        if (inFile)
        {
            cout << track[count].course << ";" << track[count].desc << ";" 
                 << track[count].date << "\n";
            count++;
        }
    }

    inFile.close();
    cin.clear();
}

我可以再给您一个建议,以便您使“主”更整洁,那就是使用函数指针。 您可以查找在中定义的std :: function。 您可以做的是绘制一张chars和std :: functions映射,看起来像是std :: map>。 然后,您可以分配键“ a”和“ A”以指向函数Case_a_A的值,依此类推。 这样,当用户按下该键时,您只需转到该键并调用其值即可,该值即为函数。

  ask by Duncan translate from so

未解决问题?本站智能推荐: