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

Problem z odczytem z pliku .txt funkcji string

0 głosów
475 wizyt
pytanie zadane 17 marca 2020 w C i C++ przez Qswarty1257 Nowicjusz (140 p.)

Hej,
od niedawna zacząłem swoją przygodę z programowaniem w c++. Całkiem nieźle się w to wkręciłem, byłem na jednym kursie na którym nauczyłem się podstaw tego języka. Obecnie samemu w domu trochę ćwiczę nad nim, wzorując się trochę na filmach z kanału Pasja Informatyki ( ͡° ͜ʖ ͡°). Obecnie mam pewien problem z odczytem linii z pliku .txt, nie jestem w stanie odczytać tego, czy zmienna  string log i has się na tym pliku znajdują. Byłbym bardzo wdzięczny, jeżeli ktoś umiałby mi pomóc, tudzież wytłumaczył ( ͡° ͜ʖ ͡°)

 case '1':
                        {
                        plik.open("konta.txt",ios::in);
                            if (plik.good()==false)
                            {
                                cout <<"Wystapil nieoczekiwany blad, prosimy sprobwac pozniej" <<endl;
                                exit (0);
                            }
                        cout << "Prosze podac login i haslo " << endl;
                        cin >> log;
                        cin >> has;
// dla for'a dodam pare zmiennych
    int dlugosc=log.length();
    int dlugosc2=has.length();
                            for (int nr_linii=1;;nr_linii++)
                            {
                                if (log[dlugosc-1]==getline(plik,linia),has[dlugosc2-1]==getline(plik,linia))
                                {
                                    cout <<"Witamy" << log <<endl;
                                    system("pause")
                                    break;
                                }
                                else
                                {
                                    cout<<"Wystapil blad, prosimy sporobowac ponownie pozniej"<<endl;
                                }
                            }
                        plik.close();
                        }
                        break;

 

komentarz 17 marca 2020 przez tkz Nałogowiec (42,040 p.)
Pokaż cały kod, oraz format zawartości konta.txt.
komentarz 17 marca 2020 przez Qswarty1257 Nowicjusz (140 p.)

Plik .txt jest nie jest zapisany

#include <iostream>
#include <string>
#include <cstdlib>
#include <fstream>
#include <conio.h>
#include <stdio.h>
#include <windows.h>
using namespace std;

int main()
{
while (true)
{
system ("cls");
    char wybor1; char wyborc1; string log; string has; string login; string  haslo; string linia;
    cout << "Witaj w Serwisie SDZ" << endl;
    cout << "Co chesz zrobiæ?" << endl;
    cout << "1 Zaloguj sie" << endl;
    cout << "2 Moj koszyk" << endl;
    cout << "3 Wyszukaj produkt" << endl;
    cout << "4 Zakoncz program" <<endl;
    fstream plik;
    wybor1=getch();
        switch (wybor1)
        {
            case '1':
            {
            cout << "Prosze wcisnac 1, aby sie zalogowac lub 2, zeby utowrzyc konto" << endl;
            wyborc1=getch();
                switch (wyborc1)
                    {
                    default:
                        {
                        cout << "Brak podanej operacji" << endl;
                        system("pause");
                        }
                        break;
                    case '1':
                        {
                        plik.open("konta.txt",ios::in);
                            if (plik.good()==false)
                            {
                                cout <<"Wystapil nieoczekiwany blad, prosimy sprobwac pozniej" <<endl;
                                exit (0);
                            }
                        cout << "Prosze podac login i haslo " << endl;
                        cin >> log;
                        cin >> has;
// dla for'a dodam pare zmiennych
    int dlugosc=log.length();
    int dlugosc2=has.length();
                            for (int nr_linii=1;;nr_linii++)
                            {
                                if (log[dlugosc-1]==getline(plik,linia),has[dlugosc2-1]==getline(plik,linia))
                                {
                                    cout <<"Witamy" << log <<endl;
                                    system("pause")
                                    break;
                                }
                                else
                                {
                                    cout<<"Wystapil blad, prosimy sporobowac ponownie pozniej"<<endl;
                                }
                            }
                        plik.close();
                        }
                        break;
                    case '2':
                        {
                        plik.open("konta.txt",ios::out | ios::app);
                        cout << "Prosze podac login " << endl;
                        cin >> login;
                        cout << "Prosze podac haslo " << endl;
                        cin >> haslo;
                        plik<<login<<endl;
                        plik<<haslo<<endl;
                        plik.close();
                        }
                        break;
                    }
            }
            break;
            case '2':
            {
            cout <<"Obecnie nie ma nic w twoim koszyku!" <<endl;
            cout << endl;
            system("pause");
            }
            break;
            case '3':
            {
            cout << "Sklep tymczasowo niedostepny!" <<endl;
            cout << endl;
            system("pause");
            }
            break;
            case '4':
            {
            exit(0);
            break;
            }
            default:
            {
            cout << "Brak podanego wybrou, prosze wybrac liczbe z zakresu 1-3" <<endl;
            cout << endl;
            system("pause");
            }
        }
}
    return 0;
}

 

komentarz 17 marca 2020 przez tkz Nałogowiec (42,040 p.)
Z tego co widzę, to kod się nawet nie skompiluje. getline nie ma operatora ==, więc jak chcesz je porównać?
komentarz 17 marca 2020 przez Qswarty1257 Nowicjusz (140 p.)
zmieniłem to na =, a także przecinek na %%
komentarz 17 marca 2020 przez tkz Nałogowiec (42,040 p.)

A zaczęło się przez to kompilować? 

Założenie:

Format z czytanego pliku

a b
c d
e f
g h
i j
k l

Możemy czytać tak: 

std::string a, b;
while (file>> a >> b)
{
    if(a==password && b==login)
        //zrob cos tam
}

 

komentarz 17 marca 2020 przez Qswarty1257 Nowicjusz (140 p.)

Nie, mam jeden obecnie problem, a kod wygląda tak:

for (int nr_linii=1;;nr_linii++)
                            {
                                if (log[dlugosc-1]=getline(plik,linia) %% has[dlugosc2-1]=getline(plik,linia))
                                {
                                    cout <<"Witamy" << log <<endl;
                                    system("pause");
                                    break;

expected primary-expression before '&' token

komentarz 17 marca 2020 przez Qswarty1257 Nowicjusz (140 p.)
dobra już wiem jaki mam problem, mój mega głupi bład..
komentarz 17 marca 2020 przez Qswarty1257 Nowicjusz (140 p.)
chodziło mi o to, że pomyliłem %% z &&.., aczkolwiek teraz mi pokazuje, że:

lvalue required as left operand
komentarz 17 marca 2020 przez tkz Nałogowiec (42,040 p.)
#include <iostream>
#include <fstream>

void printMenu()
{
    std::cout << "Witaj w Serwisie SDZ" << '\n';
    std::cout << "Co chesz zrobiæ?" << '\n';
    std::cout << "1 Zaloguj sie" << '\n';
    std::cout << "2 Moj koszyk" << '\n';
    std::cout << "3 Wyszukaj produkt" << '\n';
    std::cout << "4 Zakoncz program" << '\n';
}

int main(void)
{

    while (true)
    {
        printMenu();

        switch (std::cin.get())
        {
        case '1':
        {
            std::ifstream databaseFile("db.txt");
            std::string login;
            std::cin >> login;
            std::string password;
            std::cin >> password;
            std::string loginFromFile;
            std::string passwordFromFile;
            while (databaseFile >> loginFromFile >> passwordFromFile)
            {
                if (login == loginFromFile && password == passwordFromFile)
                    std::cout << "Zalogowano.\n";
                else
                    std::cout << "Niestety.\n";
            }
        }
        break;

        default:
            break;
        }
    }

    return 0;
}
admin admin

Pierwszy kod, drugi plik z, którego czytam. Nie mówię, że kod jest najpiękniejszy, ale powinien pokazać zamysł czytania danych. 

komentarz 17 marca 2020 przez Qswarty1257 Nowicjusz (140 p.)
dzięki za pomoc!

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 1,114 wizyt
pytanie zadane 27 marca 2020 w C i C++ przez Hubert731 Obywatel (1,650 p.)
0 głosów
0 odpowiedzi 237 wizyt

93,695 zapytań

142,612 odpowiedzi

323,223 komentarzy

63,224 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.

...