Witam,
Próbuję użyć funkcji sleep() na Linux.
Problem polega na tym, że najpierw wypisuję tekst, potem używam sleep'a, a program najpierw czeka i potem wypisuje wszystko na raz. Chciałbym zrobić taki mini loading kropek w sensie:
"Twoja odpowiedz jest (1s) . (1s) . (1s) . Poprawna!"
A kompilator wykonuje coś takiego: (3s) Twoja odpowiedz jest...Poprawna!;
Legenda:
(xs) oznacza x sekund wstrzymania programu.
Dołączam pełen kod:
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <unistd.h>
#include <algorithm>
std::string temat, nick;
std::string tresc[5];
std::string odpA[5],odpB[5],odpC[5],odpD[5];
std::string poprawna[5];
int main()
{
std::string linia{};
int nr_linii{1};
int nr_pytania{};
int punkty{};
std::string odpowiedz[5];
std::fstream file;
file.open("abc.txt", std::ios::in);
if(file.good() == false) {std::cout << "Access denied!"; exit(0);}
while(getline(file,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++;
}
file.close();
for(int i{}; i<5; i++)
{
std::cout << '\n' << tresc[i];
std::cout << '\n' << "A) " << odpA[i];
std::cout << '\n' << "B) " <<odpB[i];
std::cout << '\n' << "C) " <<odpC[i];
std::cout << '\n' << "D) " <<odpD[i];
std::cout << '\n' << "\nTwoja odpowiedz: ";
std::cin >> odpowiedz[i];
std::cout << "\nTwoja odpowiedz jest";
sleep(1); std::cout << ".";
sleep(1); std::cout << ".";
sleep(1); std::cout << ".";
std::transform(odpowiedz[i].begin(), odpowiedz[i].end(), odpowiedz[i].begin(), ::tolower);
if(odpowiedz[i] == poprawna[i])
{
std::cout << " Poprawna!\n\n";
punkty++;
}
else std::cout << " Niepoprawna!\n\n";
}
std::cout << "\nKoniec quizu! Zdobyte punkty: " << punkty;
std::cin.ignore();
getchar();
return 0;
}
Plik .txt:
Programowanie w C++
XYZ
Typ zmiennych o nazwie float przechowuje:
liczby calkowite
napisy
liczby zmiennoprzecinkowe
pojedyncze znaki
c
Wstrzymanie wykonania programu na czas 2 sekund uzyskasz instrukcja:
Wait(2000)
Stop(2000)
Delay(2000)
Sleep(2000)
d
Ktora deklaracja jest zapisana poprawnie?
int x;
integer x;
x:integer;
x=integer;
a
Z jakiego przedzialu zostanie wylosowana liczba: rand()%10+2
0..9
2..9
2..11
0..11
c
Ile razy wykona sie petla: for (int i=4; i>=-2; i--)
ani razu
nieskonczenie wiele razy
6
7
d
(Dałem txt w bloczku na kod)
Kombinowałem coś z std::cin.ignore() po funkcji sleep(), ale program wymaga wciśnięcie klawisza + enter (czego bym nie chciał)
Czy ktoś wie, jak rozwikłać ten problem?
Z góry dziękuję.