• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Brak mozliwosc wczytania odpowiedzi z klawiatuy

Cloud VPS
0 głosów
143 wizyt
pytanie zadane 26 lipca 2018 w C i C++ przez MatZyN Początkujący (350 p.)

Witam! 

Mam problem z moim programem który ma szyfrowac i deszyfrowac kod ASCII. Zrobiłem gdzieś błąd w kodzie poniewaz wprzy menu wybierania jak klikam, żeby uruchomić podprogram szyfrujący to wywala mi koniec programu przy wyborze deszfracki wszystko działa dobrze oprócz tego, że trzeba wpisać jakąś literkę jeśli się chce,żeby program zakończył swoją pracę i wyświetlił odpowiedź.

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <windows.h>
using namespace std;

string sin;
string szyfr(string szyfr);
string deszyfr();
string odp;



int main()
{
       cout<<"Co chcesz zrobic: "<<endl;
       cout<<"1.Rozszyfrowac tekst"<<endl;
       cout<<"2.Zaszyfrowac tekst"<<endl;
       cin>>odp;

       if(odp=="1")
       {
           cout << "Podaj tekst ktory zostanie zamieniony na szyfr " << endl;
           cout<<szyfr(sin);
       }
    else
    {
         cout<"deszyfr";
        cout<<deszyfr();
    }



    return 0;
}
//
string szyfr(string szyfr)
{
    getline( cin, szyfr );

for( int z = 0; z < szyfr.length(); z++)
 {
     cout <<( int ) szyfr[ z ]<< "  ";}
 return szyfr;
}


string deszyfr()
{
    string str;
    vector<int> tab;
    cout<<"Aby zakonczyc wprowadzanie wpisz dowolna litere:\n";
    int temp;
    while(cin>>temp)
    {
        tab.push_back(temp);
    }
for(int i=0; i <tab.size();i++)
   {
             str+=(char)tab[i];
    }
    return str;
}

 

1 odpowiedź

0 głosów
odpowiedź 26 lipca 2018 przez Marcin Siniarski Gaduła (4,420 p.)
wybrane 26 lipca 2018 przez MatZyN
 
Najlepsza
  1. Wiesz o coś o void? Twoje funkcje zwracają string, ale nigdzie nie są one przechowywane.
  2. We funkcji "szyfr" przekazujesz argument, który jest używany tylko w tej funkcji. Może lepiej usunąć ten argument i zamiast tego mieć zmienną lokalnie we funkcji?
  3. Linia nr.8, sin to funkcja. Nie masz zaincludowanego "cmath", ale warto zmienić na przyszłość

Problemem o którym piszesz w pytaniu jest cin zostawiający '\n'.
https://forum.pasja-informatyki.pl/5572/getline-i-cin-ignore
Przy wyborze opcji używasz cin, który zostawia '\n'. Później używasz getline, który kończy swoją pracę automatycznie gdyż oczekuje na '\n'.

PS
Starałem naprawić funkcje 'deszyfr', niestety bez skutku może ty lub ktoś inny da radę?

#include <iostream>
#include <string>
#include <vector>
using namespace std;

void wypiszMozliwosci();

void szyfr();
void deszyfr();
bool endProgram = false;
int tryb;

int main() {
	while(!endProgram) {
		wypiszMozliwosci();
		cout << "=> ";
		cin >> tryb;
		switch(tryb) {
			case 1:
				cout << "Wybrano deszyfrowanie" << endl;
				deszyfr();
				break;
			case 2:
				cout << "Wybrano szyfrowanie" << endl;
				szyfr();
				break;
			case 3:
				endProgram = true;
				break;
			default:
				cout << "Zla opja" << endl;
				break;
		}
	}
	return 0;
}
void wypiszMozliwosci() {
	cout << "Co chcesz zrobic: " << endl;
	cout << "1.Rozszyfrowac tekst" << endl;
	cout << "2.Zaszyfrowac tekst" << endl;
	cout << "3.Aby wyjsc z programu" << endl;
}

void szyfr() {

	string szyfrIn;
	cin.ignore(); // Trzeba oczyścić bufor z '\n' !
	getline(cin, szyfrIn);

	for(int z = 0; z < szyfrIn.length(); z++) {
		cout << (int) (szyfrIn[z]) << " ";
	}
	cout << endl;
}


void deszyfr() {
	string str;
	vector<int> tab;

	cout << "Aby zakonczyc wprowadzanie wpisz dowolna litere: " << endl;

	int temp;
	while(cin >> temp) {
		tab.push_back(temp);
	}

	for(int i = 0; i <tab.size(); i++) {
		str += (char) (tab[i]);
	}
	cout << str << endl;
}

 

komentarz 26 lipca 2018 przez MatZyN Początkujący (350 p.)
Dzięki za pomoc! Z tym deszyfrem będę próbował i jeszcze napize jak coś wyjdzie.

Podobne pytania

0 głosów
1 odpowiedź 176 wizyt
0 głosów
1 odpowiedź 544 wizyt
pytanie zadane 23 października 2020 w C i C++ przez Alioth Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 528 wizyt

93,469 zapytań

142,404 odpowiedzi

322,716 komentarzy

62,852 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...