Jakiś problem z pętlą(prawdopdoobnie)

0

Oto co mam. Działam na pliku txt w którym zawartość prezentuje się następująco:
ab cd ef

Oto mój kod:

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


using namespace std;  

   

int main()
{
    
int n=65536;


    
int a=4;

int b=5;

char znak1, znak2;

fstream plik;





plik.open("slownik.txt",ios::in);

if (plik.good() == true)
{
                
for (int i=0;i<2;i++)
{

plik>>znak1 >> znak2;
}

}

plik.close();



int t = (int)znak1*256 + (int)znak2;


int x = ((a*t)+b)%n;

int f1 = x/256;

int f2 = f1*256;

int f3 = x-f2;

//cout<<(char)f1<<" "<<(char)f3;



cout<<znak1<<" "<<znak2;









getch();

return 0;

}

 

Wyświetla tylko środkową parę, czyli cd a moim zamiarem tworząc taką a nie inną pętę było to aby wyświetliło i ab i cd.

Zresztą jak zmienię w pętli for 2 na 3 to też wyświetli się samo ef a moim zamiarem jest wyświetlanie wszystkich par bądź też ewentualnie konkretnej ich ilości od do.

No już jestem jakoś max blisko, pomoże ktoś?

0

Wyświetla tylko c i d bo w pętli czujesz a i b a potem przy drugim obiegu wstępujesz a = c i b = d.

0

No ok, ale wiesz co zrobić aby efekt był taki jaki chcę?

Jeżeli to np zajmuje bardzo mało czasu to możesz wkleić przerobione na tak jak bym chciał?

0

No już jestem jakoś max blisko, pomoże ktoś?

Nie wiem skąd to błędne przeświadczenie. Kod to jakiś bełkot. Wczytujesz dane do dwóch zmiennych i się dziwisz ze przechowują tylko jedną wartość. o_O
A te jakieś twoje przeliczenia to już w ogóle jakaś masakra. Może i bym poprawił ale skoro tobie nawet sformatować kodu się nie chciało?

0

Nie wiem na jakiej podstawie oceniasz obliczenia. To tak ma być, to akurat jest dobrze, może moją pokręconą metodą ale dzięki tym obliczeniom szyfruje tak zwanym szyfrem digramowym. No ale mniejsza z tym, obliczenia to już mój problem. To właśnie polega na tym że są 2 znaki i ze sobą wchodzą w korrelacje a potem na bazie pewnego algorytmu obliczeń dają pewien efekt. Ten efekt jest nawet w kodzie ale specjalnie żeby nie mieszać i komplikować to posłałem go w komentarz a jako wynik dałem tylko znaki wstępne żeby nie zawracać sobie tym głowy a skupić się na jedynej kwestii która mnie nurtuje.

Jak mówiłem, bardzo chciał bym aby tak jak w pliku jest "ab cd ef" to żeby wczytywać je np na ekran wszystkie. To jedyne czego chce a kwestie tego co oprócz tego robi program w tym momencie schodzą na plan dalszy.

0

To może zacznij od podstaw? Napisz program który wypisuje zawartość całego pliku. Bo twój problem polega na tym że najpierw chcesz wczytać cały plik do 2 znaków (a niestety w tych dwóch znakach zmieścisz nie mniej, nie wiecej, ale właśnie dwa znaki) i dziwisz się że nie wczytało całego pliku.

0

To znaczy problem polega na tym że to niestety musi być tak że znak z lewej strony w jednej zmiennej a ten z prawej w drugiej, właśnie w związku z zasadą szyfru digramowego.

To zapytam inaczej. Mówisz o wczytaniu całej zawartości pliku. Da się to zrobić w taki sposób że przekieruje te lewostronne znaki do jednej zmiennej a prawostronne do drugiej?

0
char a, b;
while (cin >> a >> b) {
    cout << a << " " << b << "\n";
}

Czy może źle Cię zrozumiałem?

0

Żeby wczytać dwa znaki do a i dwa znaki do b, to musisz mieć string a nie char. Do char zmiescisz jeden znak nie więcej

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