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

W czym leży dokładnie problem?

Object Storage Arubacloud
0 głosów
625 wizyt
pytanie zadane 3 maja 2015 w C i C++ przez Data Overmind Początkujący (430 p.)

Dokładnie nie wiem z czym mam problem ale podejrzewam że z Code::blocks, albo z X-term (mogę się mylić)...

Kod jest dobry (na 100% także nie ma sensu go w ogóle tu wklejać), kompiluje się...

Wszystko ok... tylko jak odpowiadam w quizie (z odc. 7 https://www.youtube.com/watch?v=h2Taf16gQDI),

to przy podaniu prawidłowej odpowiedzi, wywala mi że podałem nieprawidłową odpowiedź.  

Na początku myślałem że jest problem w kodzie, ale wrzuciłem sobie kod z paczki zamieszczonej na stronie http://miroslawzelent.pl/kurs-c++/pliki-tekstowe-zapis-odczyt-fstream/  no i program szwankuje tak samo...

Siedzę na linuxie. Wydaje mi się że problem leży gdzieś w IDE lub coś konsolką...

Przy przykładzie np. z odcinka 6 https://www.youtube.com/watch?v=ib7LXBNfZ7g kompiluje mi przy bibliotece ncurses (po dodaniu -lncurses) ale też efekt końcowy nie jest taki jaki powinien być... pomimo że program się kompiluje to jednak nie działa właściwie (chociaż powinien). 

Nie mam w ogóle pomysłu co może być nie tak, możliwe że coś znajdę ... jeżeli ktoś wie o co może chodzić to z góry dzięki wielkie :)

3 odpowiedzi

+1 głos
odpowiedź 3 maja 2015 przez Dorion300 Szeryf (90,250 p.)
wybrane 3 maja 2015 przez Data Overmind
 
Najlepsza

Stringi to także tablice.

U mnie na łindowsie działa wszystko ok.

warto jeszcze dodać że w konsoli linuxowej jest inne kodowanie niź w windowsie.

Może w tym jest jakiś problem.

Spróbuj przez coś innego, zainstaluj code::blocka i skompiluj/

Wine? to zło które wita cię craschami, bugami za każdym krokiem.

komentarz 3 maja 2015 przez niezalogowany
Kodowanie jest ok:

joszi@joszi:~/cb_projects/ppp123/bin/Release$ file -bi quiz.txt
text/plain; charset=us-ascii
komentarz 3 maja 2015 przez Dorion300 Szeryf (90,250 p.)
Zmień kodowanie w pliku na UTF-8.
komentarz 3 maja 2015 przez niezalogowany

us-ascii jest podzbiorem utf-8

joszi@joszi:~/cb_projects/ppp123/bin/Release$ echo "papapajd" > test.txt
joszi@joszi:~/cb_projects/ppp123/bin/Release$ file -bi test.txt 
text/plain; charset=us-ascii
joszi@joszi:~/cb_projects/ppp123/bin/Release$ echo "papapajd  łóąśćńź" > test.txt
joszi@joszi:~/cb_projects/ppp123/bin/Release$ file -bi test.txt 
text/plain; charset=utf-8
joszi@joszi:~/cb_projects/ppp123/bin/Release$ 

 

Wniosek: zmiana kodowania nie pomoże.

Dla pewności dodałem polskie znaki w quiz.txt następnie sprawdziłem czy zadziała.

Nie zadziałała

 

 

komentarz 3 maja 2015 przez Data Overmind Początkujący (430 p.)

Hmm... w pliku tekstowym zmieniłem jedną pierdołę i mi program nagle działa ;/ 

"Koniec wiersza" był ustawiony na windows, ale to jednak jest śmieszne... nie rozumiem tego. . . chociaż jest to TxT z paczki do tego quizu, no ale jak robiłem przecież swój quiz to powinno działać, chyba że nie zapisuje mi standardowo "koniec wiersza" jako Linux... ale już sam nie wiem, muszę sprawdzić dzisiaj jak będę pisał to drugi raz. 

Zmieniłem też sobie terminal na ten systemowy (obługuje polskie znaki no ale to nie od zmiany terminala nagle zadziałało, co coś zmieniłem to sprawdzałem). 

Tylko teraz pytanie komu "zapropsować", ja proponuję pierwszemu który wspomniał o kodowaniu ( przez to zacząłem grzebać też w pliku tekstowym i można powiedzieć że tak mnie naprowadziliście ). 

Co do problemu z "switchem" - tym z 6 odcinka to chyba sobie dzisiaj odpuszczę po za tym wypadałoby zadać osobne pytanie a nie zagnieżdżać dwa problemy naraz ^^ 

Póki co dzięki, ale jeszcze muszę roztrzygnąć komu mam być wdzięczny z tym kodowaniem, po prostu zobaczę kto szybciej mi to podsunął... może być?

komentarz 3 maja 2015 przez Dorion300 Szeryf (90,250 p.)
edycja 3 maja 2015 przez Dorion300

A no właśnie.

Ponieważ Koniec wiersza jest inny w Windowsie i Linuxie

W windowsie jest CRLF  a w linuxie LF (Na macu CR)

A Kompilowany program na linuxie działa inaczej niź na Windowsie.Edytor w linuxie potrafi wykryć takie coś i potrafi pracować w trybie "Windows"Ale programy ręcznie napisane już nie do końca.

Więc polecam następnym razem tworzyć ręcznie pliki textowe dla linuxa i Windowsa.

Albo wiedzieć z czym to się je i dlaczego działa tak a nie inaczej i rozwiązać problem inaczej. (np. W programie zaimplementować wykrywalność i pozliwość pracy z końcem wiersza dla Windowsa)

 

Pozdrawiam.

komentarz 3 maja 2015 przez Data Overmind Początkujący (430 p.)
Dzięki za uwagę i wyjaśnienie ^^ oznaczyłem Twój post główny jako najlepszą odpowiedź. Muszę właśnie więcej pogrzebać, ale teraz będę bardziej ostrożny nawet jeśli chodzi o "pierdoły"... Linuxa sobie nie wgrałem o tak o, no bo faktycznie mogę zrobić fajrant i sobie pisać na windowsie ale co to by była za nauka jakby Ci wszystko działało i nie wiesz dlaczego :D
komentarz 3 maja 2015 przez Dorion300 Szeryf (90,250 p.)

Może wyjaśnię dla upartych jeszcze w czym dokładnie jest błąd.

Windows używa CRLF(0x0D-0x0A) a linux LF(0x0A)

Program uważa że tylko LF jest końcem wierszu a CR tekstem.

Więc w programie masz takie coś:

Pytanie1@0x0D

1Odpowiedz@0x0D

2odzpowiedz@0x0D

3odpowiedz@0x0D

4prawdziwaodpowiedz@0x0D(np.C@0x0D)

A C nie równa się C@0x0D, prawda?

komentarz 3 maja 2015 przez niezalogowany
Czyli aby taki program działał na kilku platformach najlepiej zrobić plik na zasadzie delimitera

<delimiter>jakis_text<delimiter>
komentarz 3 maja 2015 przez Dorion300 Szeryf (90,250 p.)
Aby działał program na kilka platformach to byle wszystko tylko nie sposób z końcem lini

np.XML.

ale delimter też może być.
0 głosów
odpowiedź 3 maja 2015 przez sprtnbst Obywatel (1,710 p.)
Mógłbyś udostępnić fragment kodu, w którym następuje odczyt danych z pliku? Chodzi mi m.in. o ścieżkę pliku.
komentarz 3 maja 2015 przez Data Overmind Początkujący (430 p.)
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <algorithm>
#include <string>

using namespace std;

string temat, nick;
string tresc[5];
string odpA[5], odpB[5], odpC[5], odpD[5];
string poprawna[5];
string odpowiedz;
int punkty=0;

int main()
{
    int nr_linii=1;
    string linia;
    int nr_pytania=0;

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

    if (plik.good()==false)
    {
        cout<<"Nie udalo sie otworzyc pliku!";
        exit(0);
    }

    while(getline(plik,linia))
    {
        switch(nr_linii)
        {
            case 1: temat=linia;                     break;
            case 2: nick=linia;                      break;
            case 3: tresc[nr_pytania] = linia;       break;
            case 4: odpA[nr_pytania] = linia;        break;
            case 5: odpB[nr_pytania] = linia;        break;
            case 6: odpC[nr_pytania] = linia;        break;
            case 7: odpD[nr_pytania] = linia;        break;
            case 8: poprawna[nr_pytania] = linia;    break;
        }

        if (nr_linii==8) {nr_linii=2; nr_pytania++;}
        nr_linii++;
    }

    plik.close();

    for (int i=0; i<=4; i++)
    {
        cout<<endl<<tresc[i]<<endl;
        cout<<"A. "<<odpA[i]<<endl;
        cout<<"B. "<<odpB[i]<<endl;
        cout<<"C. "<<odpC[i]<<endl;
        cout<<"D. "<<odpD[i]<<endl;

        cout<<"Twoja odpowiedz: ";
        cin>>odpowiedz;

        transform(odpowiedz.begin(), odpowiedz.end(), odpowiedz.begin(), ::tolower);

        if (odpowiedz==poprawna[i])
        {
            cout<<"Dobrze! Zdobywasz punkt!"<<endl;
            punkty++;
        }
        else cout<<"Zle! Brak punktu! Poprawna odpowiedz: "<<poprawna[i]<<endl;

    }

    cout<<"Koniec quizu. Zdobyte punkty: "<<punkty;

    return 0;
}

Dla pewności wrzuciłem cały ^^ 

komentarz 3 maja 2015 przez Data Overmind Początkujący (430 p.)

A tak ten błąd wygląda w konsoli... Kod, plikt tekstowy są ok moim zdaniem. 

komentarz 3 maja 2015 przez Data Overmind Początkujący (430 p.)

Zauważyłem coś jeszcze... jedną odpowiedź mi punktuje! 

komentarz 3 maja 2015 przez Data Overmind Początkujący (430 p.)

Dodaję jeszcze że na windowsie działa ;) Ale mi chodzi o to żeby zorientować się z czym mam problem w LINUXIE

0 głosów
odpowiedź 3 maja 2015 przez niezalogowany
Faktycznie użyłem codeblocks i mingw32 (wszystko działa jak trzeba)

Program uruchomiłem poprzez wine

 

Gdy skompilowałem pod Linuxa przy pomocy GCC program wyświetla, że wybrałem błędną odpowiedź

 

Postaram się rozwiązać problem
komentarz 3 maja 2015 przez niezalogowany
Problemem jest porównanie łańcucha do tablicy:

if (odpowiedz==poprawna[i])

Windows sobie z tym radzi, Linux już gorzej

Taki quiz należałoby napisać uwzględniając po prostu wieloplatformowość

Czyli brak jest problemu z terminalem czy samym IDE (zawinił kod, który pisany był pod ms windows)

Podobne pytania

0 głosów
1 odpowiedź 290 wizyt
+1 głos
3 odpowiedzi 479 wizyt
pytanie zadane 21 czerwca 2016 w C i C++ przez ISO Początkujący (350 p.)

92,536 zapytań

141,377 odpowiedzi

319,456 komentarzy

61,922 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...