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

C++ Problem z odczytem pliku tekstowego do kompilatora

0 głosów
603 wizyt
pytanie zadane 28 lutego 2017 w C i C++ przez scheiba Nowicjusz (160 p.)

Witam. Postanowiłem pójść dalej jeśli chodzi o temat pobierania danych z pliku txt chciałem zrobić program który zrobi możliwość wyboru kilka Quizów z różnych dziedzin do wyboru. Problem generalnie tkwi w tym, że kompilator nie chce mi wczytać pliku gdyż pokazuje mi błąd w 43 linijce:


|43|error: incompatible types in assignment of 'std::string {aka std::basic_string<char>}' to 'std::string [12] {aka std::basic_string<char> [12]}'|

|48|error: cannot convert 'std::string {aka std::basic_string<char>}' to 'char' in assignment|


|69|error: no match for 'operator>>' (operand types are 'std::istream {aka std::basic_istream<char>}' and 'std::string [12] {aka std::basic_string<char> [12]}')|

#include <iostream>
#include <cstdlib>
#include <fstream>
#include <string>
#include <algorithm>
using namespace std;
char dziedzina;
string tresc [12];
string odpA[12],odpB[12],odpC[12],odpD[12];
string odpowiedz[12];
string poprawna;

int main()
{
    cout <<             "WITAJ W TELETURNIEJU" << endl;
    cout <<            " ______________________ "<< endl;
    cout <<     "Wybierz dziedzine która ciebie interesuje" <<endl;
    cout << "1. QUIZ Z WIEDZY POLSCE" << endl;
    cout << "2" << endl;
    cout << "3" << endl;

    switch(dziedzina)
    {
        case '1':
                cout<<"Quiz z wiedzy o Polsce"<<endl;
                int nr_lini=1;
                string linia;
                int nr_pytania=0;

                fstream plik;
                plik.open("polska.txt",ios::in);

                if (plik.good()==false)
                {
                    cout<<"Nie ma takiego pliku"<<endl;
                    exit(0);
                }
                while (getline(plik,linia))
                {
                    switch (nr_lini)
                    {

                    case 1: tresc=linia; break;
                    case 2: odpA[nr_pytania]=linia; break;
                    case 3: odpB[nr_pytania]=linia; break;
                    case 4: odpC[nr_pytania]=linia; break;
                    case 5: odpD[nr_pytania]=linia; break;
                    case 6: poprawna[nr_pytania]=linia; break;
                    }

                if (nr_lini==6)
                {
                    nr_lini=2;nr_pytania++;
                }
                nr_lini++;

                }
                plik.close();
                plik.clear();

                for (int i=0;i<=11;i++)
                {
                    cout<<endl<<tresc[i]<<endl;
                    cout<<"A. "<<odpA[i]<<endl;
                    cout<<"B. "<<odpB[i]<<endl;
                    cout<<"C. "<<odpC[i]<<endl;
                    cout<<"D. "<<odpD[i]<<endl;
                    cout<<"Twoja odpowiedz: ";
                    cin>>odpowiedz;
                    transform(odpowiedz.begin(),odpowiedz.end(),odpowiedz.begin(),::tolower);
                }
    }




    return 0;
}

Program nie jest jeszcze dokończony, ale ze wzgledów praktycznych zawsze sprawdzam błędy przed napisaniem całego programu. Domyślam się, że chodzi coś tutaj z funkcją char (chyba że się mylę). Proszę o pomoc. Co jest błędem i dlaczego. Byłbym wdzięczny o wytłumaczenie błędu który popełniam. Przy pisaniu programu wzorowałem się na kursie Mirosława Zelenta odc 7.

2 odpowiedzi

0 głosów
odpowiedź 28 lutego 2017 przez MararOn Bywalec (2,620 p.)
U Ciebie zarówno zmienna "treść", jak i "odpowiedź" to tablice, a Ty nie odwołujesz się do żadnego konkretnego indeksu. Za to zmienna "poprawna" już tablicą nie jest, więc nie możesz się odwoływać do niej jakby nią była.
0 głosów
odpowiedź 28 lutego 2017 przez Raymond.Z Obywatel (1,800 p.)

Cześć.

W linii 43 próbujes do zmiennej, która jest tablicą stringów przypisać string, kiedy powinieneś do konkretnego elementu tej tablicy przypisać wartość typu string.

W linii 48 znowu robisz podobny błąd, masz zmienną typu string, podając index w takiej zmiennej próbujesz się odwołać do pojedynczego znaku, który będzie typu char, a próbujesz przypisać pod ten index wartość, która jest stringiem.

Ostatni błąd jest w linii 69, gdzie za pomocą strumienia std::cin próbujesz nadać wartość zmiennej typu tablicowego, a powinieneś się odwoływać do konkretnego elementu tej tablicy.

Podobne pytania

0 głosów
0 odpowiedzi 266 wizyt
0 głosów
1 odpowiedź 394 wizyt
pytanie zadane 7 czerwca 2018 w C i C++ przez Hasbuitsth Nowicjusz (140 p.)

93,742 zapytań

142,680 odpowiedzi

323,299 komentarzy

63,328 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...