Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z pętlą, referencjami (?) - gra milionerzy

Ostatnio zmodyfikowano 2016-05-06 13:31
Autor Wiadomość
sparklemo7ion
Temat założony przez niniejszego użytkownika
Problem z pętlą, referencjami (?) - gra milionerzy
» 2016-05-06 02:29:37
Heej, jestem początkującym programistą robiącym na razie jakieś proste programy w cmd. Po grze Lotto naszło mnie na zrobienie milionerów no i tu już napotkałem kłopot w pierwszej funkcji.
C/C++
#include <iostream>
#include <cstdlib> //losowa liczba
#include <windows.h> //sleep
#include <cstdlib> //exit
#include <fstream>
using namespace std;

void plik( string * pytanie, string * odpa, string * odpb, string * odpc, string * odpd, string * pop, int & nr )
{
    fstream plik;
    string linia;
    int nr_linii = 1;
    plik.open( "milionerzy.txt", ios::in ); //owieramy plik   *   ios:in - wprowadz dane z pliku
   
    if( plik.good() == false )
    {
        cout << "Plik nie istnieje!" << endl;
        exit( 1 );
    }
   
    while( getline( plik, linia ) )
    {
       
        switch( nr_linii )
        {
        case 1:
            pytanie[ nr ] = linia;
            break;
        case 2:
            odpa[ nr ] = linia;
            break;
        case 3:
            odpb[ nr ] = linia;
            break;
        case 4:
            odpc[ nr ] = linia;
            break;
        case 5:
            odpd[ nr ] = linia;
            break;
        case 6:
            pop[ nr ] = linia;
            break;
           
        }
       
        if( nr_linii == 6 )
        {
            nr++;
            nr_linii == 0;
           
        }
       
        nr_linii++;
    }
   
    plik.close();
   
   
}



int main()
{
   
    string pytanie[ 15 ], odpa[ 15 ], odpb[ 15 ], odpc[ 15 ], odpd[ 15 ], poprawna[ 15 ];
    int nr_pytania = 0;
   
    plik( pytanie, odpa, odpb, odpc, odpd, poprawna, nr_pytania );
   
    cout << "Witamy w grze milionerzy!" << endl;
    cout << "Jestes gotowy? No to pytanie 1: " << endl;
    Sleep( 2000 );
   
    cout << pytanie[ 0 ] << pytanie[ 5 ] << endl;
    cout << odpa[ 7 ];
    cout << poprawna[ 0 ];
   
    return 0;
   
}
I jeszcze jedno.. Plik źródłowy wygląda tak jak w switch...case czyli linia po linii --> pytanie, odpa, odpb, odpc, odpd i poprawna odp.

Problem polega na tym ze w funkcji main gdy chce wczytać inne dane niż pierwsza, początkowa wartość jakiejkolwiek tablicy, to program po prostu nie pokazuje nic.
Program tylko pokazuje dane na ekran gdy
cout << pytanie[ 0 ]
 
cout << poprawna[ 0 ]
 a juz nie pokazuje przy wartościach tablicy większych od 0 jak np
cout << odpa[ 7 ];
Może jestem ślepy, ale już tyle razy sprawdzam ten kod i nic nie moge wyłapać ://
Tablice przez referencje przekazałem funkcji chyba prawidlowo prawda?
P-147972
carlosmay
» 2016-05-06 05:53:21
Kompletnie nie rozumiem o co chodzi z wczytywaniem z pliku.
Pokaż jak wygląda plik.
Moim zdaniem wczytywanie jest niedopasowane do zawartości pliku.

Pięć 15 elementowych tablic zamieniłbym na jedną tablicę struktur.
C/C++
struct Questions
{
    std::string m_answerA;
    std::string m_answerB;
    std::string m_answerC;
    std::string m_answerD;
    std::string m_good_answer;
};

int main()
{
    Questions questions[ 15 ];
    //...
    std::cout << questions[ 5 ].m_answer << std::endl;
    std::cout << questions[ 5 ].m_good_answer << std::endl;
}

Może to być też klasa.
P-147973
mateczek
» 2016-05-06 06:59:06
C/C++
if( nr_linii == 6 )
{
    nr++;
    nr_linii = 0; //tutaj
P-147974
sparklemo7ion
Temat założony przez niniejszego użytkownika
» 2016-05-06 13:31:03
@carlosmay: Nie "kosztowałem" jeszcze programowania obiektowego, zabiorę się za to w najbliższym czasie :P
@mateczek: Dzięki wielkie!:) Tyle problemu przez jeden znak równania, nie wiem jak mogłem nie zauważyć tyle razy sprawdzając ten kod...
P-147983
« 1 »
  Strona 1 z 1