1

Тема: Пошук створення меню для программи

Добрий день. Я пишу курсову роботу на тему: "Вічний календар". Хочу додати, щось схоже на меню "Натисніть 1 - щоб ввести нову дату, натисніть 2 щоб завершити роботу". Шукаю певних ідей від вас програмісти, бо  у вас знань більше чим в мене. Проблема в тому що, мені потрібен перезапуск програми, в циклі while. While + goto не дуже корректно працює, тому може є інші розв'язки данного питання.

2

Re: Пошук створення меню для программи

swith case конструкцію використати

3 Востаннє редагувалося Betterthanyou (05.05.2016 10:31:36)

Re: Пошук створення меню для программи

antl написав:

Проблема в тому що, мені потрібен перезапуск програми, в циклі while. While + goto не дуже корректно працює, тому може є інші розв'язки данного питання.

Використовуйте функції

тип назва(параметр1, параметр2 ... параметр n)
{
код
}

int main()
{
...
while(true)
{
назва(параметр1, параметр2 ... параметр n);
}
...
}

4

Re: Пошук створення меню для программи

Betterthanyou написав:
antl написав:

Проблема в тому що, мені потрібен перезапуск програми, в циклі while. While + goto не дуже корректно працює, тому може є інші розв'язки данного питання.

Використовуйте функції

тип назва(параметр1, параметр2 ... параметр n)
{
код
}

int main()
{
...
while(true)
{
назва(параметр1, параметр2 ... параметр n);
}
...
}

Мені потрібен перезапуск  всієї програми, тому потрібно буде всю програму засунути в функцію, але щось не дуже хочеться таке робити

5

Re: Пошук створення меню для программи

break;
використати як варіант

6

Re: Пошук створення меню для программи

reverse2500 написав:

break;
використати як варіант

щось схоже на нескінченний цикл + break?

7

Re: Пошук створення меню для программи

break; можна використовувати не лише в циклі, це вихід так би мовити з циклу з завершенням його

8

Re: Пошук створення меню для программи

Прихований текст
antl написав:
Betterthanyou написав:
antl написав:

Проблема в тому що, мені потрібен перезапуск програми, в циклі while. While + goto не дуже корректно працює, тому може є інші розв'язки данного питання.

Використовуйте функції

тип назва(параметр1, параметр2 ... параметр n)
{
код
}

int main()
{
...
while(true)
{
назва(параметр1, параметр2 ... параметр n);
}
...
}

Мені потрібен перезапуск  всієї програми, тому потрібно буде всю програму засунути в функцію, але щось не дуже хочеться таке робити

Аби ви показали фрагменти свого коду то було б зрозуміліше що там у вас. Можна спробувати викликати головну функцію main (якщо таке дозволить компілятор) там де потрібно перезапустити програму, але й це вже буде безкінечна рекурсія

9

Re: Пошук створення меню для программи

Betterthanyou написав:
Прихований текст
antl написав:
Betterthanyou написав:

Використовуйте функції

тип назва(параметр1, параметр2 ... параметр n)
{
код
}

int main()
{
...
while(true)
{
назва(параметр1, параметр2 ... параметр n);
}
...
}

Мені потрібен перезапуск  всієї програми, тому потрібно буде всю програму засунути в функцію, але щось не дуже хочеться таке робити

Аби ви показали фрагменти свого коду то було б зрозуміліше що там у вас. Можна спробувати викликати головну функцію main (якщо таке дозволить компілятор) там де потрібно перезапустити програму, але й це вже буде безкінечна рекурсія

#include "func.h"
#include "locale.h"
#include <cstring>
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
using namespace std;

int main(int argc, char * argv[])
{ reboot:
    SetConsoleCP(1251);
       SetConsoleOutputCP(1251);
     system("cls");
   setlocale(LC_CTYPE, "Russian");
   //создание переменных
unsigned    int  month=0, year=0, year_Minus;

char month_s[20];
//ввод и проверка года на корректность
while ((correct_year(year))==1)
{   system("cls");
     std::cout << "введите год от 1583 до 9999 | " ;
     cin.clear();
     while (!(std::cin >> year))
    {   system("cls");
        std::cin.clear();
        while (std::cin.get() != '\n');
        std::cout << "Неправильный ввод. Повторите.\n";

    }
 }
//проверка на высокосность года
system("cls");
    if (LeapYear(year) == 1)
    {    std::cout << year << " год високосный, в феврале 29 дней " << std::endl;    }

    else
    {    std::cout << year << " год НЕ високосный, в феврале 28 дней " << std::endl;    }

//ввод месяца
    while (translate(month_s) == 25)
    {     std::cout << " "<<std::endl;
        std::cout << "Введите месяц английскими буквами или цифрами без 0 для 1-9 месяцев " << std::endl;
        std::cin >> month_s;    }

year_Minus =  year ;

//перевод месяца в численный эквивалент
if (translate(month_s)==1)
{month=13;
year_Minus--;}
if (translate(month_s)==2)
{month=14;
year_Minus--;}
if (translate(month_s)==3)
{month=3;}
if (translate(month_s)==4)
{month=4;}
if (translate(month_s)==5)
{month=5;}
if (translate(month_s)==6)
{month=6;}
if (translate(month_s)==7)
{month=7;}
if (translate(month_s)==8)
{month=8;}
if (translate(month_s)==9)
{month=9;}
if (translate(month_s)==10)
{month=10;}
if (translate(month_s)==11)
{month=11;}
if (translate(month_s)==12)
{month=12;}

int month_cout=month;
if (month_cout==13)
{
    month_cout=1;
}
if (month_cout==14)
{
    month_cout=2;
}
int day;
// проверка дня месяца на корректность
 while (check(year, day, month) == 1)
 {  std::cout << " "<<std::endl;
    std::cout << "введите число месяца:" << std::endl;
          while (!(std::cin >> day))
    {
        std::cin.clear();
        while (std::cin.get() != '\n');
        std::cout << "Неправильный ввод. Повторите.\n";
            }
}
cin.clear();

//подсчеты алгоритма вычисления дня недели
int a=(14-month)/12;
int    y=year_Minus-a;
int m=month+12*a-2;
int  result = ((7000 + (day+ y + y/4 - y/100 + y/400 + (31*m)/12)));
int result_j = ((6998 + (day+ y + y/4  + (31*m)/12)));
system("cls");
//вывод результата
std::cout << " "<<std::endl;
std::cout << "        ----------" << std::endl;
std::cout <<"\tВы ввели " <<day<< "."<< month_cout<<"."<< year << std::endl;
std::cout <<"        ----------"<< std::endl;
std::cout << " "<<std::endl;
Result_out(result);
cout<<" -Григорианский календарь"<<endl;
std::cout << " "<<std::endl;
Result_out(result_j);
cout<<" -Юлианский календарь"<<endl;
std::cout << " "<<std::endl;
std::cout << " "<<std::endl;

//std::cout<<"1- ввод новой даты"<<std::endl;
//std::cout<<"2-выход"<<std::endl;
//std::cin>>menu;

while (1)
    {
         std::cout << "1 - ввести новую дату"     << std::endl
              << "2 - Выход"   << std::endl;

    std::string temp;
        std::getline( std::cin, temp );

    if ( ! temp.compare( "1" ) )
    {
goto reboot;
    }

    else if ( ! temp.compare( "2" ) )
    {
          exit(0);
    }

    else
    {
          //Error
    }

    }
system("PAUSE");
  return 0;
}

10

Re: Пошук створення меню для программи

погана порада

Ну от приклад, але цей приклад тупий тому не використовуйте його

Суть така якщо у вас буде меню лише з двох пунктів то можна зробити вічний цикл на функцію main, а знизу функції ще один цикл який буде відповідати за вибраний пункту меню, якщо 1 то нічого не робити у випадку з 2 - вийти, а умова while (ind > '2'); не виконається і програма перейде на початого циклу while (true) тим самим перезапустивши весь код...

        do
        {
            std::cout << "1 - ввести новую дату" << std::endl
                << "2 - Выход" << std::endl;
            ind = getch();
            if (ind == '1')
            {

            }
            else if (ind == '2')
            {
                exit(0);
            }
            else
            {
                std::cout << "Error!\n";
                
                continue;
            }
        } while (ind > '2');


#include "func.h"
#include "locale.h"
#include <cstring>
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <conio.h>
using namespace std;

int main(int argc, char * argv[])
{
    unsigned int ind = 0;
    while (true)
    {
        SetConsoleCP(1251);
        SetConsoleOutputCP(1251);
        system("cls");
        setlocale(LC_CTYPE, "Russian");
        //создание переменных
        unsigned    int  month = 0, year = 0, year_Minus;

        char month_s[20];
        //ввод и проверка года на корректность
        while ((correct_year(year)) == 1)
        {
            system("cls");
            std::cout << "введите год от 1583 до 9999 | ";
            cin.clear();
            while (!(std::cin >> year))
            {
                system("cls");
                std::cin.clear();
                while (std::cin.get() != '\n');
                std::cout << "Неправильный ввод. Повторите.\n";

            }
        }
        //проверка на высокосность года
        system("cls");
        if (LeapYear(year) == 1)
        {
            std::cout << year << " год високосный, в феврале 29 дней " << std::endl;
        }

        else
        {
            std::cout << year << " год НЕ високосный, в феврале 28 дней " << std::endl;
        }

        //ввод месяца
        while (translate(month_s) == 25)
        {
            std::cout << " " << std::endl;
            std::cout << "Введите месяц английскими буквами или цифрами без 0 для 1-9 месяцев " << std::endl;
            std::cin >> month_s;
        }

        year_Minus = year;

        //перевод месяца в численный эквивалент
        if (translate(month_s) == 1)
        {
            month = 13;
            year_Minus--;
        }
        if (translate(month_s) == 2)
        {
            month = 14;
            year_Minus--;
        }
        if (translate(month_s) == 3)
        {
            month = 3;
        }
        if (translate(month_s) == 4)
        {
            month = 4;
        }
        if (translate(month_s) == 5)
        {
            month = 5;
        }
        if (translate(month_s) == 6)
        {
            month = 6;
        }
        if (translate(month_s) == 7)
        {
            month = 7;
        }
        if (translate(month_s) == 8)
        {
            month = 8;
        }
        if (translate(month_s) == 9)
        {
            month = 9;
        }
        if (translate(month_s) == 10)
        {
            month = 10;
        }
        if (translate(month_s) == 11)
        {
            month = 11;
        }
        if (translate(month_s) == 12)
        {
            month = 12;
        }

        int month_cout = month;
        if (month_cout == 13)
        {
            month_cout = 1;
        }
        if (month_cout == 14)
        {
            month_cout = 2;
        }
        int day;
        // проверка дня месяца на корректность
        while (check(year, day, month) == 1)
        {
            std::cout << " " << std::endl;
            std::cout << "введите число месяца:" << std::endl;
            while (!(std::cin >> day))
            {
                std::cin.clear();
                while (std::cin.get() != '\n');
                std::cout << "Неправильный ввод. Повторите.\n";
            }
        }
        cin.clear();

        //подсчеты алгоритма вычисления дня недели
        int a = (14 - month) / 12;
        int    y = year_Minus - a;
        int m = month + 12 * a - 2;
        int  result = ((7000 + (day + y + y / 4 - y / 100 + y / 400 + (31 * m) / 12)));
        int result_j = ((6998 + (day + y + y / 4 + (31 * m) / 12)));
        system("cls");
        //вывод результата
        std::cout << " " << std::endl;
        std::cout << "        ----------" << std::endl;
        std::cout << "\tВы ввели " << day << "." << month_cout << "." << year << std::endl;
        std::cout << "        ----------" << std::endl;
        std::cout << " " << std::endl;
        Result_out(result);
        cout << " -Григорианский календарь" << endl;
        std::cout << " " << std::endl;
        Result_out(result_j);
        cout << " -Юлианский календарь" << endl;
        std::cout << " " << std::endl;
        std::cout << " " << std::endl;

        //std::cout<<"1- ввод новой даты"<<std::endl;
        //std::cout<<"2-выход"<<std::endl;
        //std::cin>>menu;


        do
        {
            std::cout << "1 - ввести новую дату" << std::endl
                << "2 - Выход" << std::endl;
            ind = getch();
            if (ind == '1')
            {

            }
            else if (ind == '2')
            {
                exit(0);
            }
            else
            {
                std::cout << "Error!\n";

                continue;
            }
        } while (ind > '2');

    system("PAUSE");
    return 0;
}

Але й на мою думку варто те все що в функції мані розбити на окремі функції, або ж зробити клас