C++ czyszczenie wiadomości

0

Mam problem z zadaniem. Zadanie wykonuje w Dev C++. Wykonałam menu lecz nie wiem jak je skończyć ponieważ muszę wpisać czyszczenie wiadomość (przykład [8] [9] [10]) m oraz nie wiem jaką wartość wprowadzić do while(opcja!=) ponieważ jak prowadzam większą od 9 to nie kompiluje się program. prosze o pomoc

#include <cstdlib>
#include <iostream>
#include <string>
#include <conio.h>

using namespace std;

void strtoupper(string & msg)

{
                           int dl;
     dl = msg.length();
     for (int i=0; i<dl; i++)
     {
         msg[i]=toupper(msg[i]);

     }
     }
void strtolower(string & msg)
{
     int dl;
     dl=msg.length();
     for(int i=0; i<dl; i++)
     {
             msg[i]=tolower(msg[i]);

             }
     }
void strEncoding(string msg, string klucz, string &encode)
{
     int dl = msg.length();
     char znak;
     for(int i=0; i<dl; i++)
             {
             znak=msg[i]+ klucz[i%35];
             encode.push_back(znak);

              }
}
void strDecoding(string encode, string klucz, string &decode)
{
     int dl= encode.length();
     char znak;
     int dl_klucza= klucz.length();
     for (int i=0; i<dl; i++)
         {
         znak= encode[i]- klucz[i%dl_klucza];
         decode.push_back(znak);
         }
}

char menu(char opcja)
{
    system("cls");
     std::cout<<endl<<"================================================";
     cout<<endl<<"|[1] Zmien klucz                               |";     
     cout<<endl<<"|[2] Wczytaj wiadomosc                         |";
     cout<<endl<<"|[3] Zmien ciag znakow na wielkie litery       |";
     cout<<endl<<"|[4] Zmien ciag znakow na male litery          |";
     cout<<endl<<"|[5] Koduj wiadomosc                           |";
     cout<<endl<<"|[6] Dekoduj wiadomosc                         |";
     cout<<endl<<"|[7] Pokaz dane                                |";
     cout<<endl<<"|[8] Wyczysc zakodowana wiadomosc              |";
     cout<<endl<<"|[9] Wyczysc dekodowana wiadomosc              |";
     cout<<endl<<"|[10]Wyczysc wiadomosc pobrana z klawiatury    |";
     cout<<endl<<"|[11]Wyjdz z programu                         |"<<endl<<endl;
     opcja = getch();
     return opcja;
     cin.get();
     }

void getmsg(string &msg)
{
     cout<<"Podaj wiadomosc"<<endl;
     getline(cin, msg);

     }
void changekey(string &klucz)
{
     cout<<"wprowadz klucz"<<endl;
     getline(cin, klucz);
     }

int main()
{
    string klucz="ABCDEFGHIJKLMNOPRSTUWXYZ,. ";
    string encode;
    string decode;
    string msg;
    string c;
    string text;
    char opcja='0';

    while (opcja!='10')
    {
          opcja=menu(opcja);
          switch (opcja)
          {

                 case '1':
                      changekey(klucz);
                      break;
                 case '2':
                      getmsg(msg);
                      break;
                 case '3':
                      strtoupper(msg);
                      cout<<endl<<msg;
                      cin.get();
                      break;
                 case '4':
                      strtolower(msg);
                      cout<<endl<<msg;
                      cin.get();
                      break;    
                 case '5':
                       strEncoding(msg, klucz, encode);
                      cout<<endl<<encode;
                      cin.get();
                      break;
                 case '6':
                      strDecoding(msg, klucz, decode);
                      cout<<endl<<msg;
                      cin.get();
                      break;
                 case '7':
                      cout<<endl<<msg;
                      cin.get();
                      break;

      }                       
   }
 }
0

Bo char to 1 znak więc nie ma prawa się kompilować. Zmień char na int ewentualnie na stringa, jednak wtedy switch odpada. Nie wiem czy nie masz gdzieś jeszcze błędu bo nie chce mi się wgryzać w kod.

0
paulinka8932 napisał(a)

char menu(char opcja)
{
( ... )
opcja = getch();
return opcja;
cin.get();
}

Po co ci cin.get() skoro przed nim wychodzisz z funkcji? Dlaczego wczytujesz za pomocą getch() wartość, a nie cin'em? Dlaczego w switch'u wykorzystujesz typ char? Nie zapiszesz za jego pomocą więcej niż jednego znaku, tak jak kolega wyżej pisał skorzystaj z int. Dlaczego nie umieścisz tego kodu w odpowiednich tagach tylko kopiujesz na żywca w poście? Ogólnie z całym szacunkiem brzydki jest ten kod :) przeanalizuj go sobie od początku.

edit:
skoro przekazujesz argument przez referencje w pierwszej Twojej funkcji to dlaczego nie zrobisz tego samego z funkcją menu? To by Ci oszczędziło pisania konstrukcji typu "opcja=menu(opcja);"

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0