C++-ban kéne csinálnom egy kvízt. Fájlból kéne beolvasnom 10 db kérdést 4 lehetséges válasszal . És a kérdéseket keverni kellene?
#include "stdafx.h"
#include <utility>
#include <string>
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <fstream>
#include <ctime>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int kerdesek;
setlocale(LC_ALL, "hun");
std::ifstream in("kérdések.txt");
int tomb[10];
for(int i(0); i<10; ++i)
{
in >> tomb[i];
std::cout << tomb[i];
}
srand(time(0));
for (std::size_t i = 0; i < 10; ++i)
{
int random = rand() % (10 - i);
std::cout << i + 1 << ". kerdes: " << kerdesek[random].first << '\n';
std::string valasz;
std::cin >> valasz;
std::cout << (kerdesek[random].second == valasz ? "helyes valasz!\n" : "helytelen valasz!\n");
std::swap(kerdesek[random], kerdesek[9 - i]);
}
system("pause");
return 0;
}
Számomra ez teljes káosznak tűnik, mintha úgy kukáztad volna össze a kódot. A kérdéseket tartalmazó tömb pl. miért int típusú?
Szerintem gondold át, hogyan kellene megoldani ezt a feladatot:
- Feltételezem, hogy van egy fájlod, aminek minden ötödik sora egy kérdést tartalmaz (alatta pedig a 4 lehetséges válasz, soronként egy).
- Ezt a fájlt mondjuk soronként elválasztva beolvashatod egy 9x4-es string mátrixba, így a mátrix minden sora egy kérdést és a hozzá tartozó 4 lehetséges választ fogja tartalmazni (ugye C-ben 0-tól van az indexelés, ezért nem 10x5-ös mátrixot írtam).
Akkor most ott tartunk, hogy ki kellene íratni a kérdéseket, de úgy, hogy a hozzá tartozó válaszok random sorrendben jelenjenek meg:
- Kell egy 0-9-ig futó ciklus ami végigmegy a mátrixon soronként.
-- Minden cikluslépésben kiírod a mátrix[i][0]. elemét, ez maga a kérdés.
-- Ezután több lehetséges megoldás lehet: Én azt mondom, hogy legyen még egy ciklus, ami 1-4-ig fut.
-- Legyen egy int generalt_szamok vektor, amit minden i. cikluslépésben kinullázol.
---- A cikluson (j) belül: Minden cikluslépésben generálsz egy random számot 1-4 között.
---- Ha a generált szám már benne van a generalt_szamok vektorban, akkor a ciklusváltozót csökkented egyel és újat generálsz.
---- Ha a generált szám még nincs benne a generalt_szamok vektorban, akkor beirod a generalt_szamok vektorba, illetve kiíratod a mátrix[i][generalt_szam] elemét, amelyik a kérdéshez tartozó egyik lehetséges válasz lesz.
Viszont ez a megoldás olyan szempontból veszélyes lehet, hogy könnyen végtelen ciklusba kerülhetsz vagy legalábbis előfordulhat, hogy hosszú lesz a futási ideje a számgenerálás miatt, de jobb megoldás hirtelen nem jut eszembe rá.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!