Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вызов функции, Выкидывает из прграммы 
:(
    Опции темы
OzMod
  Дата 6.5.2017, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 21.1.2014

Репутация: нет
Всего: 1



Люди добрые ))) я как 4 дня начал  изучать с++
помогите разобраться...
почему меня выкидывает из программы при вызове этого блока кода...
 if (CoD == CoDNew)
    {
    cout << "Доступ к файлу открыт" << endl;
    return NamE;
    return CoD;
    return CoDNew;
    
    }
а не выкидывает при выполнени этого...
else
    {
    cout << "No";
    return NamE;
    }

--------------------------------------------------------------------
Код

#include <iostream> 
#include <string>
#include <cstdlib>
#include <ctime>
using namespace std;

class OpFILE
{
public:
    void InpFILE()
    {
    cout << "Выбирите файл для расшифровки" << endl;
    cout << "1: Зашифрованный файл" << endl;
    cout << "2: С генерировать пароль" << endl;
    cout << "3: Моя работа" << endl;
    cout << "----------------------" << endl;
    cout << "Выбирите цифру: ";
    cin >> NamE;
    InpPASS();
    }
    
    private:
    string NamE;
    string CoD;
    string CoDNew = "0000";
    
    string InpPASS()
    {
    cout << "Выбран: " << NamE << "й пункт меню" << endl;
    if(NamE == "1")
    {
    CoDe();    
    }
    else if(NamE == "2")
    {
    srand(time(0));
    CoDNew = (rand() % 999);
    cout << "Новый код доступа: " << (rand() % 999)<< endl;
CoDe();
    }
    else
    {
    cout << "No";
    return NamE;
    }
    }
    
    //------------------------------
    string CoDe()
    {
    do
    {
    cout << "Введите код доступа: ";
    cin >> CoD;
    if (CoD != CoDNew)
    {
    cout << "--------------------------" << endl;
    cout << "Введён не правильный пароль" << endl;
    }
    }while(CoD != CoDNew);
    if (CoD == CoDNew)
    {
    cout << "Доступ к файлу открыт" << endl;
    return NamE;
    return CoD;
    return CoDNew;
    
    }
    }
};

int main()
{
setlocale(LC_CTYPE,"rus");
OpFILE ObjFILE;
ObjFILE.InpFILE();
}

PM MAIL   Вверх
vpf
Дата 6.5.2017, 04:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 14.11.2016
Где: Moscow

Репутация: нет
Всего: нет



Потому что операторы return CoD и return CoDNew недоступны программе, выход будет всегда через return Name.
В чем смысл трех возвратов из функции...непонятно.
PM MAIL IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
OzMod
Дата 6.5.2017, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 21.1.2014

Репутация: нет
Всего: 1



vpf, сможешь исправить код...
PM MAIL   Вверх
vpf
Дата 6.5.2017, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 14.11.2016
Где: Moscow

Репутация: нет
Всего: нет



Код


#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>

using namespace std;

class OpFILE {
public:
    void InpFILE() {
        cout << "Выберите файл для расшифровки" << endl;
        cout << "1: Зашифрованный файл" << endl;
        cout << "2: С генерировать пароль" << endl;
        cout << "3: Моя работа" << endl;
        cout << "----------------------" << endl;
        cout << "Выберите цифру: ";
        cin >> NamE;
        InpPASS();
    }

private:

    string NamE;
    string CoD;
    string CoDNew = "0000";


    string InpPASS() {
        wstring wsTmp(NamE.begin(), NamE.end());
        cout << "Выбран: " << NamE << "-й пункт меню" << endl;

        if (NamE == "1") {
            CoDe();
        } else if (NamE == "2") {
            srand(time(0));
            char *pstr = new char[4]{0};
            itoa((rand() % 999),pstr,10);
            CoDNew = string(pstr);
            cout << "Новый код доступа: " << CoDNew << endl;
            CoDe();
        } else {
            cout << "No";
            return NamE;
        }
    }

    //------------------------------
    string CoDe() {
        do {
            cout << "Введите код доступа: ";
            cin >> CoD;
            if (CoD!=CoDNew) {
                cout << "--------------------------" << endl;
                cout << "Введён неправильный пароль" << endl;
            }
            if(CoD=="0") {
                cout << "Выход" << endl;
                return CoD;
            }

        } while (CoD!=CoDNew);
        if (CoD == CoDNew) {
            cout << "Доступ к файлу открыт" << endl;
            return NamE;
        }
    }
};

int main() {
    setlocale(LC_CTYPE, "rus");
    OpFILE ObjFILE;
    ObjFILE.InpFILE();
    return 0;
}


Все компилируется и работает. 

Это сообщение отредактировал(а) vpf - 6.5.2017, 14:17
PM MAIL IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
OzMod
Дата 6.5.2017, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 21.1.2014

Репутация: нет
Всего: 1



vpf, Спасибо большое!!
Я просто только 5 день с++ изучаю, еще очень мало знаю!!
PM MAIL   Вверх
OzMod
  Дата 6.5.2017, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 21.1.2014

Репутация: нет
Всего: 1



vpf, слушай даже твой пример вылетает при выполнении этого блока кода...
Код

if (CoD == CoDNew) {
            cout << "Доступ к файлу открыт" << endl;
            return NamE;


что за...((
PM MAIL   Вверх
vpf
Дата 6.5.2017, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 14.11.2016
Где: Moscow

Репутация: нет
Всего: нет



Что значит "вылетает". Этот термин применяют когда программа разрушается и выдает Exception с печатью стека вызовов и кучей диагностики.
У Вас в этой строке просто выход из функции  InPass()  и так как эта функция последняя в функции InpFile() то выход и из нее.
И так как InpFile() это последняя функция в main() то далее следует выход из main().


У Вас выход из цикла это нормальная работа программы. Если хотите чтобы выхода не было надо переписать код.
Предлагаю. Установите симулятор, разберитесь как с ним работать и по шагам пройдитесь по собственной программе. 
И когда все станет ясно, поправьте код.
PM MAIL IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
OzMod
  Дата 6.5.2017, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 21.1.2014

Репутация: нет
Всего: 1



vpf, Вот что выдает при компиляции..
21    21    C:\Dev-Cpp\Project\class.cpp    [Warning] non-static data member initializers only available with -std=c++11 or -std=gnu++11
                C:\Dev-Cpp\Project\class.cpp    In member function 'std::string OpFILE::InpPASS()':
29    37    C:\Dev-Cpp\Project\class.cpp    [Warning] extended initializer lists only available with -std=c++11 or -std=gnu++11
--------------------------------------------------------------------------------
далее когда доходит до этого кода
Код

if (CoD == CoDNew) {
            cout << "Доступ к файлу открыт" << endl;
            return NamE;

программа завершается и вылетает окно типа ( прекращена работа программы )
--------------------------------------------------------------------------------------------------------------------------------------
Можешь предложить другой вариант написания этого кода?

Добавлено через 7 минут и 26 секунд
vpf, И еще подскажи пожалуйста , где можно скачать Симулятор или как он правильно называется ?
PM MAIL   Вверх
vpf
Дата 7.5.2017, 04:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 14.11.2016
Где: Moscow

Репутация: нет
Всего: нет



1. При компиляции выдает предупреждения, скопируйте в гугл, там написано, почему они вылезают,
   на работу программы они не влияют.
2.  Программа завершает работу потому что так написана. В приложении картинка алгоритма
    программы, как она работает сейчас. Чтобы написать "другой вариант" надо знать, что требуется.
    Выкладывайте свою версию алгоритма. 

Это сообщение отредактировал(а) vpf - 7.5.2017, 06:21

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  16.png 107,19 Kb
PM MAIL IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1664 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.