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

C++ program do nauki programowania

Object Storage Arubacloud
+4 głosów
1,939 wizyt
pytanie zadane 9 kwietnia 2015 w C i C++ przez PiotrY Użytkownik (590 p.)
Czołem,
Widzę, że są tu światłe głowy :) więc może zwrócę się do Was z takm problemem, z którym nie mogę się uporać. Jestem w C++ na początku drogi.
Po obejrzeniu odcinka:
http://miroslawzelent.pl/kurs-c++/pliki-tekstowe-zapis-odczyt-fstream/

stworzyłem sobie w C++ program, który pobiera mi z notatnika pytanie i odpowiedź.

Następnie prosi mnie o wpisanie dokładnie takiej odpowiedzi (którą sobie pobrał z notatnika)

No i w większości progam działa fajnie ale czasem nawet jak porównuje te same "stringi" to wyskakuje mu błąd.
Dzieje się tak, gdy porównuje np: wyrazy ze spacją.

Program jest przygotowany do robienia takich powtórek z programowania i uczy dokładności.
I przykładowo w czasie tutoriala można sobie robić notatki na zasadzie pytanie odpowiedaź a po jakimś czasie sobie powtórzyć.

Ma ktoś pomysł jaki może być problem? Może jakieś inne ulepszenie?

Pozniżej skrypt, jak ktoś chce to może sobie na nim pracować oczywiście wymaga pliku tekstowego.

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <algorithm>
#include <string>
#include<windows.h>
#include<stdio.h>

using namespace std;
string linia, pytanie[100], poprawna[100], odpowiedz;
int nr_pytania=0, nr=1, pyt=0;
char poprawka=0;
int nr_linii=1;
int main()
{
    fstream plik;
    plik.open("refresh.txt",ios::in);

    if (plik.good()==false)
    {
        cout<<"Nie udalo sie otworzyc pliku!";
        exit(0);
    }
    else{
    cout<<"Od ktorego pytania chcesz zaczac ?"<<endl;
    cin>>pyt;
    }
    while(getline(plik,linia))
    {
        switch(nr_linii)
        {
            case 1: pytanie[nr_pytania]=linia ; break;
            case 2: poprawna[nr_pytania]=linia; break;
        }
    if(nr_linii==2){nr_linii=0; nr_pytania++;}
    nr_linii++;
    }
plik.close();
for(int i=pyt;i<=100;i++){
    cout<<"Pytanie nr "<<pyt+nr++<<": "<<endl<<pytanie[i]<<endl;
    cin>>odpowiedz;
    cout<<endl;
    if (odpowiedz!=poprawna[i]){
        cout<<"Zla odpowiedz prawidlowa odpowiedz to: "<<endl;
        cout<<poprawna[i]<<endl<<endl;
        cout<<"chcesz poprawic ? "<<endl;
        Sleep(1000);
        cin>>poprawka;
        getchar();
        if(poprawka=='1')
        {i--;nr--;}
        else if(poprawka=='2') {i=i+1;poprawka=='0';
        }
        else {cout<<"Bledny znak,"<<endl;
        i--;nr--;
        }
    }
    else {
        cout<<"BRAWO"<<endl<<endl;
    }
}
}

2 odpowiedzi

+3 głosów
odpowiedź 9 kwietnia 2015 przez krecik1334 Maniak (58,390 p.)

Zamiast wpisywania odpowiedzi cinem, użyj getline. Tak samo zrób z wczytywaniem pliku. Jeśli chodzi o wczytywanie to kod ma wyglądać tak:

getline(cin, odpowiedz);

jeśli chodzi o plik to

getline(obiekt fstream, odpowiedz);

 

komentarz 9 kwietnia 2015 przez PiotrY Użytkownik (590 p.)
jeżeli chodzi o cin to działa - super dzięki

ale jeżeli chodzi o plik to gdzie to wpisać ?
+1 głos
odpowiedź 9 kwietnia 2015 przez daan Pasjonat (17,640 p.)
edycja 9 kwietnia 2015 przez daan
    else if(poprawka=='2') { i=i+1; poprawka=='0'; }

Tutaj chyba chodziło Ci o poprawka = '0',  '==' to jest operator porównania :D

 i może jeszcze taka mała porada jak masz ten if 

 if(poprawka=='1')
{ i--;nr--; }
else if(poprawka=='2')
{
    i=i+1;poprawka=='0';
}
else {
cout<<"Bledny znak,"<<endl;
i--;nr--;
}

to w 2 przypadkach powtarzasz operacje i--; nr--; można ten zapis lekko uprościć w ten sposób

if (poprawka == '2')
{
	i = i + 1; poprawka = '0';
}
else
{
	i--; nr--;
	if (poprawka != '1') cout << "Bledny znak," << endl;
}
komentarz 9 kwietnia 2015 przez PiotrY Użytkownik (590 p.)
no tak , faktycznie , dzięki :)

Podobne pytania

0 głosów
2 odpowiedzi 210 wizyt

92,576 zapytań

141,426 odpowiedzi

319,650 komentarzy

61,961 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!

...