program
Benny: ifstream f1;
ofstream f2;
ifstream f3;
f1.open("slownik", ios::in);
f2.open("przestawienie.txt");
f3.open("slownik2");
int i=0;
char slowo1[30], slowo2[30];
streampos pozycja;
while(!f1.eof())
{
f1>>slowo1;
while(!f3.eof())
{
cout<<i<<endl;
f3>>slowo2;
if(i==0) pozycja=f3.tellg();
if(Przestawienie(slowo1,slowo2))
{
f2<<slowo1<<" "<<slowo2<<endl;
}
i++;
}
f3.seekg(pozycja, ios::beg);
}
f1.close();
f2.close();
f3.close();
Co jest z tym nie tak?
7 sty 15:23
KKrzysiek: A jakie komunikaty błędu dostajesz?
7 sty 15:32
Benny: Właśnie problem w tym, że żadne. Kompiluje się normalnie, konsola się otwiera tylko nie wpisuje
mi nic do nowego pliku. Nie wiem co z tą pierwszą pętlą. Dałem na końcu, żeby zwiększało mi
licznik i o 1, a po odpaleniu licznik cały czas pokazuje 0.
7 sty 15:39
Benny: W tej wewnętrznej pętli licznik się zwiększa, ale nie wychodzi mi z niej.
7 sty 15:40
Metis: tutaj nie jest przypadkiem coś nie tak>
if(Przestawienie(slowo1,slowo2)) ?
7 sty 15:45
Benny: Nie, dlaczego niby?
Dałem komentarz do wnętrza całej funkcji i dodałem tylko zwiększanie licznik, czyli tylko
powinno wchodzić do pierwszej pętli i zwiększać licznik o 1 dopóki plik się nie skończy.
Problem jest taki, że licznik się w ogóle nie zwiększa.
7 sty 15:55
Metis: "slownik.txt"
"slownik2.txt"
7 sty 16:02
Benny: To też nie o to chodzi. Plik mi się otwiera.
7 sty 16:04
Jack: w jakim jezyku to jest
7 sty 16:19
Metis: C++
7 sty 16:19
Adamm: Jack C++, patrz na składnię
7 sty 16:20
Metis: Musimy poczekać na
Dziadka
Ale wydaje mi się, że tutaj coś nie gra : if(Przestawienie(slowo1,slowo2))
Jak kompiler ma rozumieć przestawienie?
U Ciebie to tylko nazwa pliku.
7 sty 16:20
Jack: Adamm
wyglada mi na C++ ale python jest rowniez podobny : D
jak i samo C.
ja poki co nie mam C++ tylko C
7 sty 16:22
Metis: I dobrze
Lepiej podobno zacząc od C, a potem przejść na C++
7 sty 16:23
Adamm: Jack, to ty chyba pythona nie widziałeś
w C nie ma operatora << ani >> z tego co kojarzę
7 sty 16:23
Mariusz:
Czy pliki do czytania są puste ?
Jedyni sposób aby dowiedzieć się co się dzieje w programie to
czytanie kodu linia po linii
7 sty 16:23
Metis: Trivial kiedyś o tym pisał.
7 sty 16:23
Mariusz:
Metis Jeżeli chodzi o Przestawienie to jest do tego funkcja ale Benny jej nie napisał
7 sty 16:25
Metis: Ok
7 sty 16:26
Benny: Ok, zmieniłem na to .txt i teraz mi to czyta, ale nadal nie działa jak powinno.
7 sty 16:28
Benny: Zauważyłem, że ta pętla się nie kończy. Jak skończy pobierać słowa z pliku to w konsoli
pokazują mi się śmiecie.
7 sty 16:29
Metis: Dopisz:
f3.clear();
przed
f3.seekg(pozycja, ios::beg);
7 sty 16:39
Mariusz:
Dziwne powinien się zatrzymać
Dla każdej linii w pliku 1 czytasz plik 3
i jeżeli funkcja daje wartość !0 (true)
to wypisujesz łańcuchy pobrane z plików 1 oraz 3 do pliku 2
7 sty 16:42
Benny: @Metis nic nie dało.
Może dam cały kod.
#include<iostream>
#include<string.h>
#include<fstream>
using namespace std;
int Przestawienie(char A[30],char B[30])
{
int i,j=0,k=0,licznik=0;
if(strlen(A)!=strlen(B))
{
return 0;
}
else
{
for(i=0 ; i<=strlen(A) ; i++)
{
if(A[i] != B[i])
{
if(licznik==0) j=i;
else k=i;
licznik++;
}
}
}
if((licznik == 2) && (A[j] == B[k]) && (A[k] == B[j])) return 1;
else return 0;
}
main()
{
char tab1[30], tab2[30];
cin>>tab1>>tab2;
cout<<tab1<<endl<<tab2<<endl;
cout<<Przestawienie(tab1,tab2);
ifstream f1;
ofstream f2;
ifstream f3;
f1.open("slownik.txt",ios::in);
f2.open("przestawienie.txt");
f3.open("slownik2.txt");
int i=0;
char slowo1[30], slowo2[30];
streampos pozycja;
while(!f1.eof())
{
f1>>slowo1;
i=0;
while(!f3.eof())
{
f3>>slowo2;
cout<<slowo2<<endl;
if(i==0) pozycja=f3.tellg();
if(Przestawienie(slowo1,slowo2))
{
f2<<slowo1<<" "<<slowo2<<endl;
}
i++;
}
f3.seekg(pozycja, ios::beg);
}
f1.close();
f2.close();
f3.close();
system("pause");
}
7 sty 16:52
Metis: Metoda ifstream::clear
Funkcje jak również metody do odczytu danych z pliku działają tylko wtedy, gdy strumień danych
jest w poprawnym stanie. Jeżeli w trakcie pracy z plikiem wystąpił jakikolwiek błąd (tj.
napotkano koniec pliku, wystąpił błąd logiczny lub sprzętowy, albo nie udało się otworzyć
pliku do odczytu), to wówczas kontynuowanie pracy z obiektem std::ifstream nie będzie możliwe.
Aby móc wznowić pracę ze strumieniem, należy skorzystać z metody clear, która czyści tzw.
flagi błędów.
7 sty 16:58
Metis: Dodaj tę metodę do obu pętli i sprawdź
7 sty 16:58
Benny: Dobra chyba jednak to wszystko jest ok, ale mój słownik ma dużo słów, a wypisań w wierszu
poleceń jest n
2
7 sty 17:01
Benny: Tylko pętla się nie kończy. Na końcu programu chcę wyświetlić komunikat, ale się nie pojawia.
7 sty 17:13
KKrzysiek: W EOF'ie leży chyba problem.
7 sty 17:14
Benny: Jaki?
7 sty 17:16
KKrzysiek: Najlepiej to debugować program, dać jakiś krótki plik tekstowy składający się z 2 wierszy i
szukać błędu.
Nie ma lepszego narzędzia.
7 sty 17:17
Metis: Przeczytaj to co wkleiłem
7 sty 17:20
Benny: Wkleiłem za tym seek i pykło
Nadal nie rozumiem czemu bez tego nie działa.
7 sty 17:24
KKrzysiek: "jeżeli w trakcie pracy z plikiem wystąpił jakikolwiek błąd (tj. napotkano koniec pliku, "
7 sty 17:44
Benny: Ogarniam
7 sty 17:49