Многофайловый проект и функция в C ++ - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь попрактиковаться в многофайловом проекте (создание файлов .cpp, а также файлов .h) и функций вместе. У меня есть некоторые функции для разных видов фигур, которые находятся в разных файлах .cpp и файле .h (мойFunctions.h) с прототипами этих функций.Я создал еще один файл .cpp (tools.cpp), в котором у меня есть все функции (например, getInt, getFloat, getBool, getBoundedInt, getWidth и т. Д.), Чтобы я мог использовать его и в других своих проектах, а также дляэтот файл tools.cpp.У меня есть файл tools.h с прототипами.Теперь я хочу создать другую функцию (allFunctionController), которая будет обрабатывать все эти различные виды функций (например, принятие пользовательского ввода, проверка правильности или недействительности ввода, функция помощи для пользователя, вызов функций формы и т. Д.).И была бы другая функция, позволяющая пользователю повторять все эти вещи, и моя основная функция будет вызывать только эту.Скриншот, который я предоставил, будет более понятным.

[скриншот]

image

tools.cpp: -

// Tools.cpp

#include"Tools.h"
#include<string>
#include<iostream>
using namespace std;

namespace tools
{
    int width( int value )
    {
        bool isNegative = value < 0;
        int spaceForSign;
        if ( isNegative )
        {
            spaceForSign = 1;
            value = -value;
        }
        else
            spaceForSign = 0;

        int digitCount = 0;
        int digits = value;
        do
        {
            // pull one digit off and count it;
            ++digitCount;

            // if I wanted to look at the digit before throwing away:
            int digit = digits % 10;

            digits = digits / 10; // remove one digit
        } while  ( digits > 0 );

        return digitCount;
    }

    char getChar(string prompt)
    {
        while (true)
        {
            char userInput;
            cout << prompt;
            cin >> userInput;
            cin.ignore(999,'\n');
            if ( !cin.fail() ) return userInput;
            cin.clear();
            cin.ignore(999,'\n');
            cout << "try again" << endl;
        }
    }

    int getInt(string prompt)
    {
        while (true)
        {
            int userInput;
            cout << prompt;
            cin >> userInput;
            cin.ignore(999,'\n');
            if ( !cin.fail() ) return userInput;
            cout << "input failure, try again";
            cin.clear();
            cin.ignore(999,'\n');
        }
    }

    int getBoundedInt( string prompt, int lowBound, int highBound )
    {
        while (true)
        {
            int userInput = getInt(prompt);
            if ( lowBound <= userInput && userInput <= highBound )
                return userInput;
            cout << "must be in range " << lowBound << " to "
                << highBound << ", try again" << endl;
        }
    }

    float getFloat(string prompt)
    {
        while (true)
        {
            float userInput;
            cout << prompt;
            cin >> userInput;
            cin.ignore(999,'\n');
            if ( !cin.fail() ) return userInput;
            cout << "input failure, try again";
            cin.clear();
            cin.ignore(999,'\n');
        }
    }

    string getString(string prompt)
    {
        while (true)
        {
            string userInput;
            cout << prompt;
            cin >> userInput;
            cin.ignore(999,'\n');
            if ( !cin.fail() ) return userInput;
            cout << "input failure, try again";
            cin.clear();
            cin.ignore(999,'\n');
        }
    }

    string getLine(string prompt)
    {
        while (true)
        {
            string userInput;
            cout << prompt;
            getline(cin, userInput);
            if ( !cin.fail() ) return userInput;
            cout << "input failure, try again";
            cin.clear();
            cin.ignore(999,'\n'); // whatever caused fail
        }
    }

    bool isLowerCase( char c )
    {
        return 'a' <= c && c <= 'z';
    }

    bool isUpperCase( char c )
    {
        return 'A' <= c && c <= 'Z';
    }

    bool isLetter( char c )
    {
        return isLowerCase(c) || isUpperCase(c);
    }

    char getLetter(string prompt)
    {
        while (true)
        {
            char userInput = getChar(prompt);
            if ( isLetter(userInput) )
                return userInput;
            cout << "letters only, please" << endl;
        }
    }

    bool getBool(string prompt)
    {
        while (true)
        {
            switch ( getChar(prompt) )
            {
            case 'y': case 'Y': return true;
            case 'n': case 'N': return false;
            }
            cout << "y or n please" << endl;
        }
    }
}

tools.h: -

// Tools.h

#ifndef TOOLS_LOCK
#define TOOLS_LOCK

#include<string>

namespace tools
{
    int getInt(std::string prompt);
    int width( int value );
    char getChar(std::string prompt);
    int getInt(std::string prompt);
    int getBoundedInt( std::string prompt, int lowBound, int highBound );
    float getFloat(std::string prompt);
    std::string getString(std::string prompt);
    std::string getLine(std::string prompt);
    bool isLowerCase( char c );
    bool isUpperCase( char c );
    bool isLetter( char c );
    char getLetter(std::string prompt);
    bool getBool(std::string prompt);
}

#endif

Мои функции.h: -

// My functions.h

namespace myFunctions
{
    void allFunctionController ();
    void solidRectangle (int size);
    void hollowRectangle (int userChoiceOfSize);
    void solidTriangleFacingNorthEast (int size);
    void hollowTriangleFacingNorthEast (int size);
    void solidTriangleFacingSouthWest (int size);
    void hollowTriangleFacingSouthWest (int size);
}

Я только добавляю сюда код пустого и сплошного прямоугольника.Но в моем проекте есть больше функций формы.

hollowRectangle.cpp: -

#include"My functions.h"
#include<iostream>
using namespace std;

namespace myFunctions
{
    void hollowRectangle (int size)
    {
        int row, column;

        for (row = 1; row <= size; row++)
        {
            if (row > 1 && row < size)
            {
                cout << "*";
                for (column = 2; column < size; column++)
                {
                    cout << ' ';
                }
                cout << "*";
            }
            else 
            {
                for (column = 1; column <= size; column++)
                {
                    cout << "*";
                }
            }
        }
            cout << endl;

        cout << endl;
        cout << "Please press enter to finish...";
        cin.ignore(999,'\n');
        return;
    }
}

solidRectangle.cpp: -

// Program for the solid rectangle

#include"My functions.h"
#include<iostream>
using namespace std;

namespace myFunctions 
{
    int solidRectangle (int size)
    {
        int row, column;

        for (row = 1; row <= size; row++)
        {
            for (column = 1; column <= size; column++)
            {
                cout << "*";
            }
            cout << endl;
        }

        cout << endl;
        cout << "Please press enter to finish...";
        cin.ignore(999,'\n');
        return 0;
    }
}

allFunctionController: - Я облажалсяВот.

// This function will control all other functions. 

#include"My functions.h"
#include"Tools.h"
#include<iostream>
using namespace std;

void allFunctionController ()
{
    using namespace tools;
    {
        int size = getBoundedInt ("Please enter the size", 1, 75);

    }
}

using namespace myFunctions;
{
void getHelp ()
{
    int size,userInput;
    cin >> userInput;
    switch (userInput)
    {
    case 1: 
        solidRectangle (size);
    }
}
}

Я хочу знать, как обрабатывать все эти заголовочные файлы и использовать эту функцию в моей функции allFunctionController.Я еще не написал свою основную функцию.Пожалуйста, дайте мне знать, если что-то не так в моем сообщении или код или вложение.Заранее спасибо.

...