Witam! Kiedy chciałem rozpocząć swój pierwszy większy projekt w konsoli, ale napotkałem problem. Otóż program po uruchomieniu się zawiesza. Po godzinach siedzenia w debuggerze, odkryłem że program po prostu nie wczytuje danych z pliku. Wielkie dzięki za odpowiedź!
Dodam wszystkie pliki, ale myslę ze tylko quiz.cpp (z funkcją main) wystarczy do zlokalizowania błędu żółtodzioba.
Pierwszy człon służy do sprawdzania poprawności rodzaju pliku, drugi do sprawdzenia ilości pytań. Reszta tak jak w filmiku Pana Zelenta.
qiz 5
Programowanie w C++
Miroslaw Zelent
Typ zmiennych o nazwie float przechowuje:
liczby calkowite
napisy
liczby zmiennoprzecinkowe
jedyncze 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
quiz.cpp:
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <windows.h>
#include "pytanie.h"
using namespace std;
bool fileNice(fstream &);
void asking();
int main()
{
asking();
return 0;
}
void asking()
{
fstream file;
/* string path;
cout << "Podaj sciezke do pliku: ";
cin >> path;
file.open(path);
while (!file.good())
{
file.clear();
cout << "Blad! Plik nie istnieje! Podaj sciezke ponownie: ";
cin >> path;
file.open(path);
}
while(!fileNice(file))
{
file.clear();
cout << "Blad! Nieznany rodzaj pliku, podaj sciezke ponownie: ";
cin >> path;
file.open(path);
} */
file.open("D:/quiz.cpp", ios::in);
fileNice(file);
if (!file.good())
{
cout << "Dzialam!"<< endl;
}
file.seekg(4);
int wielkosc;
file >> wielkosc;
file.seekg(0);
string title;
string autor;
getline(file, title);
getline(file, title); // zaczynamy od drugiej linii
getline(file, autor);
question * quiz = new question[wielkosc];
for (int i = 0; i < wielkosc; i++)
{
quiz[i].load(file, i);
}
for (int i = 0; i < wielkosc; i++)
{
quiz[i].show(title, autor);
}
delete[] quiz;
file.close();
}
void newQuiz() {}
bool fileNice(fstream & files)
{
string sFile;
files >> sFile;
if (sFile == "qiz")
{
return(true);
}
return false;
}
pytanie.h
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <windows.h>
#include <string>
using namespace std;
class question
{
public:
question(int, string, string, string, string, string, char);
question() = default;
private:
int queNum;
string que;
string a, b, c, d;
char ans;
public:
void load(fstream &, int);
void show(string &, string &);
bool check();
};
pytanie.cpp
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <windows.h>
#include "pytanie.h"
using namespace std;
question::question(int n = 0, string q = "Bledny zapis pytania", string A = "a", string B = "b", string C = "c", string D = "d", char ANS = 'e')
{
queNum = n;
que = q;
a = A;
b = B;
c = C;
d = D;
ans = ANS;
}
void question::load(fstream & file, int n)
{
int actLine = 0;
int queLine = ((queNum - 1) * 6) + 3;
string line;
while (getline(cin, line))
{
file.seekg(0);
if (actLine == queLine)
{
que = line;
}
if (actLine == (queLine + 1))
{
a = line;
}
if (actLine == (queLine + 2))
{
b = line;
}
if (actLine == (queLine + 3))
{
c = line;
}
if (actLine == (queLine + 4))
{
d = line;
}
if (actLine == (queLine + 5))
{
ans = line[0];
break;
}
actLine++;
}
}
void question::show(string & title, string & credits)
{
cout << title << " - " << credits << endl;
cout << queNum << ") " << que << endl;
cout << "a) " << a << endl;
cout << "b) " << b << endl;
cout << "c) " << c << endl;
cout << "d) " << d << endl;
}
bool question::check()
{
cout << "Twoja odpowiedz: ";
string userAns;
cin >> userAns;
for(;;)
{
if ((int)userAns[1] >= 97 || (int)userAns[1] <= 100)
{
if (userAns[1] == ans)
{
return (true);
}
return(false);
}
if ((int)userAns[1] >= 65 || (int)userAns[1] <= 68)
{
userAns[1] = (int)userAns[1] + 32;
}
else
{
cout << "Blad! podaj odpowiedz ponownie: ";
cin >> userAns;
}
}
}