Премини към съдържанието

Препоръчан отговор


Здравейте,

В момента имам сериозен проблем със взимането на броят на елементи в даден вектор.

vec.size();

и  

sizeof(vec) / sizeof(vec[0]);

не работят. Програмата те пита за брой ключове за даден тест, въвеждаш ключовете, после въвеждаш и отговорите, които са били дадени, и програмата ги сравнява и в зависимост от това колко верни отговори имаш ти дава точки. Ключовете и дадените отговори са тип char. ("A", "B", "C" etc.)
Ето го и кода, като повечето съм го направил на коментар за да си тествам само функцията която извежда броя на елементите.

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

#define CONSOLE_LOG(x) std::cout << x;

std::vector<char> keys = {'A', 'B', 'C', 'D', 'E'};
std::vector<char> studentAnswers;

int n, points = 0;
char key, answer;

template <typename T>
T vecSize(std::vector<T>& vec) 
{ 
	T size = vec.size(); 
	return size; 
}
/*
template <typename T1>
void enterKeys(std::vector<T1>& k)
{
	CONSOLE_LOG("Please enter the number of keys: ");
	std::cin >> n;

	for (int i = 0, counter = 1; i < n, counter <= n; i++, counter++)
	{
		CONSOLE_LOG("Key " << counter << ": ");
		std::cin >> key;
		k.emplace_back(key);
	}
}

template <typename T2>
void enterAnswers(std::vector<T2>& stAns)
{
	for (int i = 0, counter = 1; i < n, counter <= n; i++, counter++)
	{
		CONSOLE_LOG("Answer " << counter << ": ");
		std::cin >> answer;
		stAns.emplace_back(answer);
	}
}

template <typename T3>
void getGrade(std::vector<T3>& x, std::vector<T3>& y)
{
	for (int i = 0; i < n; i++) { if (x[i] == y[i]) { points++; } }
	CONSOLE_LOG("Points: " << points);
}
*/
int main()
{
	/*
	enterKeys(keys);
	enterAnswers(studentAnswers);

	getGrade(studentAnswers, keys);
	*/

	std::cout << keys.size() << std::endl;
	std::cout << vecSize(keys) << std::endl;

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

Опитах всевъзможни начини, и пак не става. Идеята е да заместя n променливата със броя на елементите от вектора. Програмата върви по един и същи начин, защото все пак в n променливата запазваме големината на вектора, но бих искал да си го направя с функция.
Както виждате на края на програмата си извеждам тестове. Първият, който си е по конвенционалният метод си работи сам по себе си, но пък във for цикъл не бачка.
А вторият е функцията която съм направил. Проблемът е че ми извежда непознат символ - "�"
Проблемът е че типът на елементите във вектора е char, защото като го направих с int тип си работеше както трябва.

Бих бил изключително благодарен ако някой може да ме насочи и да ми бутне едно рамо :)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Пишеш неща, които не разбираш.

Някой ти е казал да ги пишеш така?

template <typename T>
T vecSize(std::vector<T>& vec) 
{ 
    T size = vec.size(); 
    return size; 
}

T - тип на елемент от вектора.

vector<char> vec = { 'A', 'B', 'C' };
vecSize(vec);
 
template<>
char vecSize(std::vector<char> &vec)
{
    char size = vec.size();
    return size;
}

Сега виждаш ли тъпотията, която си написал?

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Да, видях я. Въпросът е че изходът на програмата е същият, не се е оправил.

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

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Той няма да се оправи, защото ти така си написал програмата. Опитваш се да принтираш символа 5, последни ASCII таблицата и ще видиш, че той няма репрезентация. Не виждам смисъл да го правиш с template, но правилният запис е

template <typename T>
size_t vecSize(const std::vector<T>& vec) 
{ 
    size_t size = vec.size(); 
    return size; 
}

 

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

 

на 8.06.2018 г. в 7:01, bvbfan написа:

Той няма да се оправи, защото ти така си написал програмата. Опитваш се да принтираш символа 5, последни ASCII таблицата и ще видиш, че той няма репрезентация. Не виждам смисъл да го правиш с template, но правилният запис е


template <typename T>
size_t vecSize(const std::vector<T>& vec) 
{ 
    size_t size = vec.size(); 
    return size; 
}

 


Мерси много, работи, но самата функция която исках да направя не работи както трябва, и се сетих защо.

Затова си оправих проблема по следният начин: Очевидно големината на вектора се променя, затова направих функция която ми копира елементите от вектора във масив, и после си направих функция която пък ми извежда големината на масива.

И това си работи идеално, но пък имам друг проблем. Ето го кода:

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

#define CONSOLE_LOG(x) std::cout << x;

std::vector<char> keys;
std::vector<char> studentAnswers;
std::vector<char>::const_iterator iter;

int n, points = 0;
char key, answer;
char* keyArray = new char[n];

template <typename T>
void copyVecToArr(std::vector<T>& vec, T arr[])
{
	for (int i = 0; i < vec.size(); i++)
	{
		arr[i] = vec[i];
	}
}

template <typename T1>
size_t arrSize(T1 arr[])
{ return (sizeof(arr) / sizeof(arr[0])); }

template <typename T2>
void enterKeys(std::vector<T2>& vec)
{
	CONSOLE_LOG("Please enter the number of keys: ");
	std::cin >> n;
	keys.resize(n);
	copyVecToArr(keys, keyArray);

	for (int i = 0, counter = 1; i < arrSize(keyArray), counter <= arrSize(keyArray); i++, counter++)
	{
		CONSOLE_LOG("Key " << counter << ": ");
		std::cin >> key;
		vec.emplace_back(key);
	}
}

template <typename T3>
void enterAnswers(std::vector<T3>& vec)
{
	for (int i = 0, counter = 1; i < arrSize(keyArray), counter <= arrSize(keyArray); i++, counter++)
	{
		CONSOLE_LOG("Answer " << counter << ": ");
		std::cin >> answer;
		vec.emplace_back(answer);
	}
}

template <typename T4>
void getGrade(std::vector<T4>& x, std::vector<T4>& y)
{
	for (int i = 0; i < arrSize(keyArray); i++) { if (x[i] == y[i]) { points++; } }
	CONSOLE_LOG("Points: " << points);
}

int main()
{
	enterKeys(keys);
	enterAnswers(studentAnswers);

	getGrade(studentAnswers, keys);

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

Знам че в момента изпълнението няма да е много бързо, но паметта после ще я оправям, за сега искам да си оправя проблемът.
Всичко си работи идеално, освен последната ми функция getGrades.
Извежда ми points: 0, въпреки че входните ми данни са еднакви, и трябва ако съм въвел брой на елементите 4, и входните ми данни са еднакви, тогава points ще да е 4.
Някаква идея? Сигурно е нещо много елементарно и глупаво, може и да не е, но го гледах и гледах, не мога да намеря проблема. Тествах, дебъгвах, нищо.
Тестове много направих. Записва си ми входните данни във векторите, но там където се прави сравнението във фор цикълът, там ми е проблема, а не разбирам защо е така.


Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Меко казано - пишеш глупости. Седни и прочети, хаотичен код.

template <typename T1>
size_t arrSize(T1 arr[])
{ return (sizeof(arr) / sizeof(arr[0])); }

Това няма да ти върне размера на масива, arr[] е указател, еквивалентен запис е arr*. Друга техника се ползва за вземането на размера на масив, но не виждам смисъл да ти е казвам, първо разбери какво пишеш, и изглежда като напълно случайно изфабрикуван.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Ами така съм чел, така са ме учили - така пиша.
Няма нужда от обиждане, при положение че не съм аз виновен. Седнал ли съм да го търся в интернет - седнал съм. Така пише, така съм го научил.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

И в интерес на истината - отговорът ти не е много умен, при положение че аз питам едно, а последвалият отговор касае съвсем друго нещо, което всъщност си работи. Този метод за взимане на размера на масива си работи.
Въпросът ми беше защо points винаги ми извежда 0.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Отказвам се, аз ти пиша, че не работи - ти пак. Оправяй се.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

E, какво пак. Окей, разбрах че не работи, това ми е ясно. Единствено ти казах, че така съм чел и така са ме учили.
Въпросът е, щом това не е правилният метод, кой е тогава?

П.П Не искам да използвам array библиотеката, защото до колкото знам там задължително трябва да имам големина на масива от самото дефиниране.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Дължина на вектор само викаш size() (или това, което аз съм написал), дължина на масив

template <typename T, size_t N>
size_t len(T (&array)[N])
{
    return N;
}

По твоят начин се прави с дефиниция

#define size(x)	sizeof(x)/sizeof(x[0])

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

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Регистрирайте се или влезете в профила си за да коментирате

Трябва да имате регистрация за да може да коментирате това

Регистрирайте се

Създайте нова регистрация в нашия форум. Лесно е!

Нова регистрация

Вход

Имате регистрация? Влезте от тук.

Вход

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

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

  • Горещи теми в момента

  • Подобни теми

    • от Ester007
      Ако може някой да  се отзове.
      Имам два въпроса:
      Как да изведа брой отличници и студенти със слаб успех?
      Как да изкарам средния успех на групата?
      #include<math.h>//matematicheski funkcii #include <iostream>//vhodno izhodni potoci #include <windows.h>//za system #include <fstream> //za zapis i chetene na fail using namespace std; int main() { int students; int ocenki; int tochki; char ime[30]; SetConsoleOutputCP(1251); SetConsoleCP(1251); int oc2=2; int oc3=3; int oc4=4; int oc5=5; int oc6=6; char otnovo = 'd'; while (otnovo == 'Д' || otnovo == 'д' || otnovo == 'D' || otnovo == 'd') { do { cout << endl << "Моля, въведете брой студенти в групата - от 10 до 16: ";// cin >> students; } while (students < 10 || students >16); for (int i = 1; i < students; i++) { cout << endl << "Студент номер: " << i << endl << endl; for (int i = 0; i < 1; i++) { tochki = rand() % (100 - 30 + 1) + 30; cout << endl << "Точки: " << tochki; } if (tochki <= 49) { cout <<endl<< "Слаб : "<<oc2; } else if (tochki <= 59) { cout << endl << "Среден: "<<oc3; } else if (tochki <= 75) { cout << endl << "Добър: "<<oc4; } else if (tochki <= 89) { cout << endl << "Много добър: "<<oc5; } else if (tochki <= 100) { cout << endl << "Отличен: "<<oc6; } else { cout << "Натиснете клавиш."; } } cout << endl << endl << "Искате ли да започнете отново? Д/Н " << endl << endl; cin >> otnovo; } return(0);  
    • от Ester007
      Здравейте!
      Опитвам се да съставя програма, с която да бъдат записвани часове. Ето и кода, който имам.

      #include <iostream>
      #include<fstream>
      #include<windows.h>
      #include<conio.h>
      #include<stdio.h>

      using namespace std;

      class kabinet
      {
          string day;
          int hour;
          string exam;
          char name[50];
          char address[50];
          int phone[10];
          int age[3];//години
      public:
          void main_menu();//главно меню
          void type_examin();//вид преглед
          void setDay();//въвеждане на  ден
          void setHour();//назоваването на часа
          int check(int);
          void price_menu();//ценова листа на предлаганите услуги
          void showHour();//показване на свободните часове
          void edit();//опция за промяна
          void modifyHour();//промяна на часа
          void delete_hour();//изтриване на запазения час
          void showDisp();//изписване на информацията относно прегледа

      };
      void kabinet::main_menu()
      {
          system("color D1");
          setlocale(LC_ALL, "bulgarian");    //за използване на български език
          system("chcp 1251>0");

          int choice = 0;
          while (choice != 5)
          {
              system("cls");
              
              cout << "                              /      1.Записване на час                 / /  /" << endl;
              cout << "                             /      2.Показване записани часове        / /  /" << endl;
              cout << "                            /      3.Промяна на час                   / /  /" << endl;
              cout << "                           /      4.Ценоразпис                       /  \_/" << endl;
              cout << "                          /      5.Изход                            /    *" << endl;
              cout << "                         /                                         /  " << endl;
              cout << "                        /                                         /  " << endl;
              cout << "                       /                                         /  " << endl;
              cout << "                      /_________________________________________/  " << endl
                  << endl << endl << endl << "Моля въведете своя избор." << endl;
              cin >> choice;

              switch (choice) {
              case 1:system("cls");;
                  type_examin();
                  break;
              case 2: system("cls");;
                  showHour();
                  break;
              case 3: system("cls");;
                  modifyHour();
                  break;
              case 4: system("cls");;
                  price_menu();
                  break;
              case 5:
                  default: {
                  cout << "Благодарим Ви!";
                  cout << "Благодарим Ви, че използвахте нашата система за записване." << endl;
                  _getch();
              }
              }

          }
      }
      void kabinet::type_examin()
      {
          system("cls");
          system("color F6");
          int choiExam = 0;
          string exam;
          while (choiExam != 7)
          {
              cout << endl << endl << endl;

              
              cout << "                               /     1.Медицински преглед                / /  / *" << endl;
              cout << "                              /     2.Диспансерен преглед               / /  /" << endl;
              cout << "                             /     3.Профилактичен преглед             / /  /" << endl;
              cout << "                            /     4.Детска консултация                / /  /" << endl;
              cout << "                           /     5.Женска консултация                /  \_/" << endl;
              cout << "                          /     6.Издаване на документи             /    *" << endl;
              cout << "                         /                                         /  " << endl;
              cout << "                        /     7.Изход                             /  " << endl;
              cout << "                       /                                         /  " << endl;
              cout << "                      /_________________________________________/  " << endl
                  << endl << endl << endl << "Моля въведете своя избор." << endl;
              cin >> choiExam;
              string exam;
              switch (choiExam)
              {
              case 1:
                  exam = "Медицински преглед";
                  setDay(); break;
              case 2: exam = "Диспансерен преглед";
                  setDay(); break;
              case 3: exam = "Профилактичен преглед ";
                  setDay(); break;
              case 4: exam = "Детска консултация";
                  setDay(); break;
              case 5: exam = "Женска консултация ";
                  setDay(); break;
              case 6:  exam = "Издаване на документи ";
                  setDay(); break;
              case 7:break;
              default:
              {
                  cout << "Благодарим Ви!";
                  _getch();
              }
              }
          }
      }
                      void kabinet::setDay()
                      {
                          system("cls");
                          system("color B2");
                          int day;
                          string date;
                          while (day!=5) {
                              cout << endl << endl << endl;
                              cout << "                                  __________________________________   " << endl;
                              cout << "                                 /                                 /  " << endl;
                              cout << "                                /                                 /  " << endl;
                              cout << "                               /     1.Понеделник                /  " << endl;
                              cout << "                              /     2.Вторник                   /  " << endl;
                              cout << "                             /     3.Сряда                     /  " << endl;
                              cout << "                            /     4.Четвъртък                 /  " << endl;
                              cout << "                           /     5.Петък                     /  " << endl;
                              cout << "                          /                                 /  " << endl;
                              cout << "                         /                                 /  " << endl;
                              cout << "                        /_________________________________/  " << endl
                                  << endl << endl << endl << "Моля въведете своя избор." << endl;
                              cin >> day;

                              switch (day)
                              {
                              case 1:
                                  date = " Понеделник ";
                                  setHour();
                                  break;
                              case 2: date = " Вторник ";
                                  setHour();
                                  break;
                              case 3: date = " Сряда ";
                                  setHour();
                                  break;
                              case 4: date = " Четвъртък ";
                                  setHour();
                                  break;
                              case 5: date = " Петък ";
                                  setHour();
                                  break;
                              default:{
                                  cout << "Грешен избор";
                                  _getch();
                              }
                          }
                      }
                  }

                  void kabinet::setHour()
                  {
                      system("cls");
                      system("color C3");
                      string custumer;
                      string day;

                      int c, flag;

                      ofstream fout("Записани", ios::app);
                      cout << endl << endl << " Въведете час: ";
                      cin >> c;
                      flag = check(c);
                      if (flag)
                      {
                          cout << "-----------------------------------" << endl;
                          cout << "   Избраният от Вас час е зает.    " << endl;
                          cout << "-----------------------------------" << endl;
                          cout << "      Моля, въведете друг.         " << endl;
                          cout << "-----------------------------------" << endl;
                      }
                      else
                      {
                      hour = c;
                      cout << endl << endl << "Въведете име и фамилия: ";
                      gets(name);
                      cout << "Адрес: ";
                      gets(address);
                      cout << " Телефонен номер: ";
                      gets(phone);
                      cout << endl << endl << "Възраст: ";
                      gets(age);
                      fout.write((char*)this, sizeof(kabinet));
                      cout << "Успешно записан час!";
                  }
                      cout << "Натиснете, който и да е клавиш, за да продължите!!!";
                      _getch();
                      fout.close();
              }
      void kabinet::price_menu()
                      {

                          cout << endl << endl << endl;
                          cout << "                                  _______________________________________________  " << endl;
                          cout << "                                 /                                              /  " << endl;
                          cout << "                                /                                              /  " << endl;
                          cout << "                               /  Медицинско за работа - 15 лева.             /  " << endl;
                          cout << "                              /  Медицинско за шофьорска книжка              /  " << endl;
                          cout << "                               /                        - 20 лева.            /  " << endl;
                          cout << "                            /  Оформяне на документи за застраховка        /  " << endl;
                          cout << "                           /                       - 50 лева.             /  " << endl;
                          cout << "                          /   Потребителски такси:                       /  " << endl;
                          cout << "                         /           за пенсионери - 1лев.              /  " << endl;
                          cout << "                        /            за осигурени лица - 2,90лева.     /  " << endl;
                          cout << "                       /                                              /  " << endl;
                          cout << "                      /   Преглед за лица, които не са осигурени     /  " << endl;
                          cout << "                     /                       - 20 лева.             /  " << endl;
                          cout << "                    /  1.Назад към главното меню                   /  " << endl;
                          cout << "                   /______________________________________________/  " << endl;
                          cout << "Натиснете, който и да е клавиш, за да продължите!!!";
                          _getch();
                          fout.close();
              }
              void kabinet::showHour();
              {
                  system("cls");
                  system("color B1");
                  ifstream fin("Записани данни: ", ios::in);
                  int c, flag;
                  cout << "Въведете запазен час: ";
                  cin >> c;
                  while (!fin.eof())
                  {
                      fin.read((char*)this, sizeof(kabinet));
                      if (hour == c)
                      {
                          system("cls");
                          cout << " Данни на пациента. ";
                          cout << "--------------------" << endl;
                          cout << "Имена: " << name;
                          cout << "Адрес: " << address;
                          cout << "Телефонен номер: " << phone;
                          cout << "Записан час за: " << date << "Час: " << hour;
                          flag = 1;
                          break;
                      }
                  }
                  if (nomb== 0)
                      cout << "Търсеният от вас номер не фигурира!!!";
                  cout << "Натиснете, който и да е клавиш, за да продължите!!!";
                  _getch();
                  fin.close();
              }

              void kabinet::edit()
              {
                  system("cls");
                  system("color A3");
                  int c, flag;

                  cout << "\n Меню за промяна";
                  cout << "\n ***************";
                  cout << "\n 1.Промяна на час ";
                  cout << "\n 2.Изтриване на запазен час";
                  cout << "Моля, изберете: ";
                  cin >> choise;
                  system("cls");
                  cout << "\n Въведете запазен час: ";
                  cin >> c;
                  switch (choice)
                  {
                  case 1: modifyHour(c);
                      break;
                  case 2:
                       delete_hour(c);//изтриване на запазения час
                      break;
                  default: cout << "\n Грешен избор!!";
                  }
                  cout << "\n  Натиснете, който и да е клавиш, за да продължите!!!";
                  _getch();
              }
              int kabinet::check(int c)
              {
                  system("color F2");
                  int flag = 0;
                  ifstream fin("Записи: ", ios::in);
                  while (!fin.eof())
                  {
                      fin.read((char*)this, sizeof(hotel));
                      if (hour== c)
                      {
                          flag = 1;
                          break;
                      }
                  }
                  fin.choice();
                  return (flag);
      }
              void kabinet::modifyHour(int c)
              {
                  system("color C3");
                  long pos, flag = 0;
                  fstream file("Record.dat", ios::in | ios::out | ios::binary);
                  while (!file.eof())
                  {
                      pos = file.tellg();
                      file.read((char*)this, sizeof(kabinet));
                      if (hour == c)
                      {
                          cout << "\n Въведете данните наново";
                          cout << "\n ***********************";
                          cout << "\n Име: ";
                          gets(name);
                          cout << " Адрес: ";
                          gets(address);
                          cout << " Телефонен номер: ";
                          gets(phone);
                          file.seekg(pos);
                          file.write((char*)this, sizeof(kabinet));
                          cout << "\n Данните Ви са променени!!!";
                          flag = 1;
                          break;
                      }
                  }
                  if (flag == 0)
                      cout << "\n Часът не е намерен!";
                  file.close();

              }
              void kabinet::delete_hour(int c)
                  int flag = 0;
              char ch;
              ifstream fin("Record.dat", ios::in);
              ofstream fout("temp.dat", ios::out);
              while (!fin.eof())
              {
                  fin.read((char*)this, sizeof(kabinet));
                  if (hour == c)
                  {
                      cout << "\n Име: " << name;
                      cout << "\n Адрес: " << address;
                      cout << "\n Телефонен номер: " << phone;
                      cout << "\n\n Искате ли да изтриете данните? (y/n): ";
                      cin >> ch;
                      if (ch == 'n')
                          fout.write((char*)this, sizeof(kabinet));
                      flag = 1;
                  }
                  else
                      fout.write((char*)this, sizeof(kabinet));
              }
              fin.close();
              fout.close();
              if (flag == 0)
                  cout << "\n Часът не е намерен.";
              else
              {
                  remove("Record.dat");
                  rename("temp.dat", "Record.dat");
              }
      }
      int main()
      {

          kabinet h;
          system("color A4"
              system("cls");
          cout << "\n\t\t\t*********************************";
          cout << "\n\t\t\t*    Проект за запис на час     *";
          cout << "\n\t\t\t*********************************";
          Sleep(200);
          char text[] = { "\n\n\n\n\t\t };
          for (int p = 0; p < strlen(text); p++)   
              cout << text[p];
              Sleep(40);
          }
          cout << "\n\n\tНатиснете който и да е клавиш!!";
          _getch();
          h.main_menu();
      }
    • от Chris Panov
      Здравейте, 
      В момента пиша една програма, в която в една от функциите ми се налага да излезна по-рано при определено условие. Функцията връща 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.
    • от Goshko
      Да се напише програма, която създава структура "Book" като имате следните полета - Title(заглавието на книгата), Автор(Author), Цена(Price) и уникален номер на книгата(ISBN-num). Да се ваведе цяло число n и след него n на брой данни за ученика. Да се изведе на монитора данните за книгата с цена по-висока от предварително зададена.
  • Дарение

×

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите условия за ползване.