Problemos z odczytem funkcji w programie

0

Witam was znowu serdecznie, chcialem zgłosić problem w tym oto programie:

#include <iostream>
#include <fstream>
#include <cstdlib>
#include<cstring>
#include <conio.h>

using namespace std;
void odczyt_cezar(){
    fstream plik;
    plik.open("wizytowka.txt",ios::in);
    if(plik.good()==false)
       {
        cout<<"Plik nie wczytany"<<endl;
        exit(0);
       }
int klucz;
cout<<"podaj wspolczynnik przesuniecia"<<endl;
cin >> klucz;
string tekst;

int nr_lini = 1;
while(getline(plik,tekst))
{

   cout<<tekst<<endl;
    nr_lini++;
}plik.close();
int dlugosc=tekst.length();
for(int i=0;i<=dlugosc ;i++){
    if(tekst[i]>=65 && tekst[i]<=90) tekst[i]=(tekst[i]-65+klucz)%26+65;
    else if(tekst[i]>=97 && tekst[i]<=122) tekst[i]=(tekst[i]-97+klucz)%26+97;
}

 cout << tekst<<endl;
 plik.open("wiytowka_1.txt",ios::out);
 plik<<tekst<<endl;
 plik.close();
}
void wprowadzenie_cezar()
{
     const short rozmiar = 100;
    char tekst[rozmiar];

int klucz;

cout<<"podaj tekst do zaszyfrowania"<<endl;
cin.getline(tekst,rozmiar);

cout<<"podaj wspolczynnik przesuniecia"<<endl;
cin >> klucz;

for(int i=0;i<=rozmiar ;i++){
    if(tekst[i]>=65 && tekst[i]<=90) tekst[i]=(tekst[i]-65+klucz)%26+65;
    else if(tekst[i]>=97 && tekst[i]<=122) tekst[i]=(tekst[i]-97+klucz)%26+97;
}
cout << tekst<<endl;
}

int main()
{
    int x;
cout<<"chcesz odczytac tekst z pliku czy sam chcesz go wprowadzic?"<<endl;
cout<<"[1] by odczytac z pliku"<<endl;
cout<<"[2] by wpisac samemu tekst"<<endl;
cin>>x;
 if(x==1)
    odczyt_cezar();
 else if(x==2)
    wprowadzenie_cezar();


return 0;

} 

Problem wygląda tak, że mianowicie nie chce mi prawidlowo odczytac funkcji "wprowadzenie_cezar". Wyswietla tylko to co ma do wyswietlenia, a nie pozwala wprowadzic danych. Dodatkowo jak w funkcji "int main()" wprowadzilem if(x=1) to cały program sie kr


zaczył, nie wiem dlaczego. Mógłbym prosic o pomoc w zrozumienu problemu, gdzie mam bląd? Dodam tylko, że "wprowadzenie_cezar" jako osobny program działa prawidłowo.

1

Mieszasz dwa sposoby czytania danych. cin>> czyta do pierwszego białego znaku, w szczególności zostawi ci znak nowej linii w buforze. getline czyta całą linię i w takiej sytuacji wczyta... tylko ten znak nowej linii który tam wisi.

0

Czekaj Kochany bo nie rozumiem. Chodzi konkretnie o wyrażenie "cin.getline"? Tylko dlaczego jako osobny program to dziala prawidłowo?

3

Chodzi o to że jak wstukujesz na klawiaturze "alamakota" i wciskasz "enter" to do bufora wejścia leci: alamakota\n.
cin>>cośtam czyta z bufora tylko do pierwszego białego znaku więc wczyta alamakota a w buforze zostaje \n.
getline() czyta całą linię z bufora więc czyta wszystko aż nie napotka znaku \n. Napotyka go od razu więc go wczytuje i nie wczytuje nic wiecej.

0

Dobra, czaje chyba. Jak wprowadzam x=2 to wtedy \n jest czytane przez getline. Tylko jak temu zaradzić? Cos pokombinuje, chodz rada w ktora strone spojrzec za rozwiązaniem byłaby mile widziana przeze mnie:) Dziekuje Ci bardzo Shalom.

1

A choćby jedno puste getline by wystarczyło ;)

0

Jeszcze raz dziękuje:) Wszystko działa:)

0

Niedawno pisałem o tym problemie.

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