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

Problem z przekonwertowaniem typu string [C++]

Object Storage Arubacloud
0 głosów
141 wizyt
pytanie zadane 2 marca 2017 w C i C++ przez Mikusbombro Użytkownik (990 p.)

Chciałem stworzyć pewną grę. Gra działa, ale ranking już nie. Dane są pobierane z pliku save. Niestety wyskakuje mi błąd pewien błąd. Domyślam się, że być może to problem z przekonwertowaniem typu string, ale nie wiem do końca tego. Prosiłbym o wyjaśnienie, czemu tak się dzieje.

 

#include <iostream>
#include <windows.h>
#include <time.h>
#include <fstream>
#include <string>
#include <cstdlib>
#include <algorithm>

using namespace std;

int wybor_menu;
int liczba[5];

void odczytaj()
{
    system("cls");
    cout<<"RANKING"<<endl<<endl;

    string dane;
    string pun;
    int nr=0;

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

    if(plik.good()==false)
    {
        cout<<"Plik nie istnieje!";
        exit(0);
    }

    string linia;
    int nr_linii=1;

    while (getline(plik, linia))
    {
        switch(nr_linii)
        {
            case 1: dane [nr] = linia; break;  // Tu oznaczony jest błąd
            case 2: pun [nr] = atoi(linia.c_str()); break;
            break;
        }

        if (nr_linii==2)
        {
            nr_linii=1; nr++;
        }

        nr_linii++;
    }

    plik.close();

    for (int i=1; i<=10; i++)
    {
    cout<<i<<". "<<dane<<"    "<<pun<<endl;
    }
}

void zapisz(string naz, int p)
{
    fstream plik;
    plik.open("save.txt", ios::out | ios::app);
    plik<<naz<<endl<<p<<endl;

    plik.close();
}

void gra()
{
    int a, b, c, d, e, f;
    int punkty=0;
    string nazwa;

    system("cls");

    while (true)
    {
        system("cls");
        srand(time(NULL));
        for (int i=0; i<=5; i++)
        {
            liczba[i] = rand()%9+1;
        }
        cout<<liczba[0]<<" "<<liczba[1]<<" "<<liczba[2]<<" "<<liczba[3]<<" "<<liczba[4]<<" "<<liczba[5]<<endl;
        Sleep(2000);
        system("cls");
        cout<<"Podaj 6 liczb oddzielonych spacja: ";
        cin>>a>>b>>c>>d>>e>>f;

        if ((a==liczba[0]) && (b==liczba[1]) && (c==liczba[2]) && (d==liczba[3]) && (e==liczba[4]) && (f==liczba[5]))
        {
            punkty++;
            cout<<"Dobrze! Masz juz "<<punkty<<" punktow"<<endl;
            Sleep(3000);
        }

        else if (a!=liczba[0] || b!=liczba[1] || c!=liczba[2] || d!=liczba[3] || e!=liczba[4] || f!=liczba[5])
        {
            cout<<endl<<"Przegrales! Punkty: "<<punkty<<endl;
            cout<<"Podaj swoja nazwe: ";
            cin>>nazwa;
            zapisz(nazwa, punkty);

            exit(0);
        }
    }
}

int main()
{
    cout << "---------------------------------------------------------"<<endl;
    cout << "                        GRA W PAMIEC                     "<<endl;
    cout << "---------------------------------------------------------"<< endl;
    cout<<endl<<"1. Start"<<endl;
    cout<<"2. Ranking"<<endl;
    cout<<"3. Wyjdz z gry"<<endl;
    cout<<"Wybierz: ";
    cin>>wybor_menu;

    switch(wybor_menu)
    {
    case 1:
        gra();
        break;
    case 2: odczytaj();
    case 3:
        exit(0);
        break;
    default:
        cout<<endl<<"Wpisales zly znak!"<<endl;
        break;
    }

    return 0;
}

Wyskakuje mi: C:\Users\User\Documents\gra w pamiec\main.cpp|39|error: cannot convert 'std::string {aka std::basic_string<char>}' to 'char' in assignment|

Z góry dzięki :)

 

2 odpowiedzi

+1 głos
odpowiedź 2 marca 2017 przez JAKUBW Nałogowiec (33,470 p.)
wybrane 2 marca 2017 przez Mikusbombro
 
Najlepsza
Próbujesz przekonwertować string czyli tablicę znaków do jednego znaku. I w tym problem.

Zapis dane[nr] zwraca znak który leży w zmiennej dane na miejscu nr. Znak, nie tablicę znaków.
–1 głos
odpowiedź 2 marca 2017 przez tangarr Mędrzec (154,780 p.)
Twoje zmienne dane i pun są pustymi napisami (std::string).
dane[n] odwołuje się do n-tego znaku w napisie dane.
Przetłumaczmy na polski co próbujesz zrobić w linii 39: Niech n-ta litera mojego pustego napisu stanie się napisem ze zmiennej linia. Albo żartem: chcę wlać wiadro wody do nieistniejącego kieliszka.
Podobnie ze zmienną pun w linii 40. Próbujesz zapisać czterobajtową liczbę (int) w jednobajtowym polu (char).

Podobne pytania

0 głosów
3 odpowiedzi 1,017 wizyt
pytanie zadane 15 lipca 2016 w C i C++ przez Ganjax666 Nowicjusz (190 p.)
0 głosów
1 odpowiedź 214 wizyt
pytanie zadane 15 lutego 2021 w C i C++ przez Rainbow99 Początkujący (430 p.)
0 głosów
2 odpowiedzi 356 wizyt

92,543 zapytań

141,385 odpowiedzi

319,493 komentarzy

61,929 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...