Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Вызов функции


Автор: OzMod 6.5.2017, 00:07
Люди добрые ))) я как 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();
}

Автор: vpf 6.5.2017, 04:12
Потому что операторы return CoD и return CoDNew недоступны программе, выход будет всегда через return Name.
В чем смысл трех возвратов из функции...непонятно.

Автор: OzMod 6.5.2017, 10:18
vpf, сможешь исправить код...

Автор: vpf 6.5.2017, 14:16
Код


#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;
}


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

Автор: OzMod 6.5.2017, 15:07
vpf, Спасибо большое!!
Я просто только 5 день с++ изучаю, еще очень мало знаю!!

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

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


что за...((

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


У Вас выход из цикла это нормальная работа программы. Если хотите чтобы выхода не было надо переписать код.
Предлагаю. Установите симулятор, разберитесь как с ним работать и по шагам пройдитесь по собственной программе. 
И когда все станет ясно, поправьте код.

Автор: OzMod 6.5.2017, 21:00
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, И еще подскажи пожалуйста , где можно скачать Симулятор или как он правильно называется ?

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)