Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

C++ Излизане от функция преди приключването й

Featured Replies

Здравейте, 

В момента пиша една програма, в която в една от функциите ми се налага да излезна по-рано при определено условие. Функцията връща string впрочем.

Ето кодът:
 

#include "stdafx.h"
#include <iostream>
#include <string>
#include <sstream>
#include <vector>

#define CONSOLE_LOG(x) std::cout << x
#define COMMAND_END command[0]
#define COMMAND_SUM command[1]
#define COMMAND_SUBTRACT command[2]
#define COMMAND_CONCAT command[3]
#define COMMAND_DISCARD command[4]
#define COMMAND_DISPSEQ command[5]

template <typename T>
void top_back(std::vector<T>& v)
{
    v.erase(v.end() - 1);
}

std::string sum(std::string& x, std::string& y, std::vector<std::string>& vec)
{
    int xInt = atoi(x.c_str());
    int yInt = atoi(y.c_str());
    int result = xInt + yInt;

    std::ostringstream os;
    std::string strResult;
    os << result;
    strResult = os.str();

    top_back(vec);
    top_back(vec);

    return strResult;
}

std::string subtract(std::string& x, std::string& y, std::vector<std::string>& vec)
{
    int xInt = atoi(x.c_str());
    int yInt = atoi(y.c_str());
    int result = xInt - yInt;

    std::ostringstream os;
    std::string strResult;
    os << result;
    strResult = os.str();

    top_back(vec);
    top_back(vec);

    return strResult;
}

std::string concat(std::string& x, std::string& y, std::vector<std::string>& vec)
{
    if (atoi(x.c_str()) < 0)
    {
        return;
    }
    else {
        std::string concatStr = y + x;

        top_back(vec);
        top_back(vec);

        return concatStr;
    }
}

void dispseq(std::vector<std::string>& vec)
{
    std::vector<std::string>::const_iterator iter;
    for (iter = vec.begin(); iter != vec.end(); iter++)
    {
        std::cout << *iter << std::endl;
    }
}

void enterSequence()
{
    std::vector<std::string> command =
    {
        "end",
        "sum",
        "subtract",
        "concat",
        "discard",
        "dispseq"
    };

    std::vector<std::string> sequence;
    std::string input;
    std::string a;
    std::string b;
    do
    {
        std::cin >> input;
        sequence.emplace_back(input);

        if (input == COMMAND_END)
        { 
            top_back(sequence);
        }
        if (input == COMMAND_SUM)
        {
            top_back(sequence);
            a = sequence[sequence.size() - 1];
            b = sequence[sequence.size() - 2];
            sequence.emplace_back(sum(a, b, sequence));
        }
        if (input == COMMAND_SUBTRACT)
        {
            top_back(sequence);
            a = sequence[sequence.size() - 1];
            b = sequence[sequence.size() - 2];
            sequence.emplace_back(subtract(a, b, sequence));
        }
        if (input == COMMAND_CONCAT)
        {
            top_back(sequence);
            a = sequence[sequence.size() - 1];
            b = sequence[sequence.size() - 2];
            sequence.emplace_back(concat(a, b, sequence));
        }
        if (input == COMMAND_DISCARD)
        {
            top_back(sequence);
            top_back(sequence);
        }
        if (input == COMMAND_DISPSEQ)
        {
            top_back(sequence);
            dispseq(sequence);
        }

    } while (input != COMMAND_END);
}

int main()
{
    enterSequence();

    std::cin.get();
    std::cin.get();
    return 0;
}

И ето проблемната функция:
 

std::string concat(std::string& x, std::string& y, std::vector<std::string>& vec)
{
    if (atoi(x.c_str()) < 0)
    {
        return;
    }
    else {
        std::string concatStr = y + x;

        top_back(vec);
        top_back(vec);

        return concatStr;
    }
}

 

Както виждате ако стрингът x(който естествено го превръщам в интиджър) е по-малък от 0, теоритично трябва да излезна от функцията, и това е единственият начин за който се сетих, с return;, обаче пък компилаторът иска функцията да връща стойност, понеже е от тип стринг.
Как да съчетая двете? - да връща стринг ако всичко е по план, и да излиза ако е по-малко от 0.

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    26%
    Дарени 256.00 EUR от нужните 1,000.00 EUR

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.