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

fstream zle czyta linie

0 głosów
367 wizyt
pytanie zadane 15 sierpnia 2018 w C i C++ przez Hitoshi1337 Nowicjusz (120 p.)

Mam problem zrobilem "system" wybierania serwerow i znajdowania i zdobycia informacji o nich z pliku .txt lecz gdy uruchamiam to mam na konsoli tylko:

Serwer:                                                       

Numer serwera: 1
Nazwa serwera: Dragon
Ilosc slotow: 512
-------------------------------------

Numer serwera: 6422272       <------ to powinno byc takie jak jest w pliku txt
Nazwa serwera: í              <------ to powinno byc takie jak jest w pliku txt
Ilosc slotow: 1       <------ to powinno byc takie jak jest w pliku txt

Plik .txt: 

1
Dragon
512
1
Dregon
312
Kod:

#include <iostream>
#include <windows.h>
#include <fstream>
#include <string>

using namespace std;

void wybor_serwera()
{
  // Zmienne do GUI
  int ilosc_serwerow=2;


  // Wazne zmienne
  int n_l, nr_linii=1, nr_serwera=1;
  char wybor;
  string linia;

  // Zmienne do listy
  int numer_serwera[2];
  string nazwa_serwera[2];
  int ilosc_slotow[2];

  // Ustawianie zmiennych


  // Czytanie z pliku serwery.txt
  ifstream serwery("serwery.txt");
  while ( getline(serwery, linia))
  {
    switch(nr_linii)
    {
      case 1: numer_serwera[nr_serwera]=atoi(linia.c_str()); break;
      case 2: nazwa_serwera[nr_serwera]=linia; break;
      case 3: ilosc_slotow[nr_serwera]=atoi(linia.c_str()); break;
    }
    if (nr_linii==3){nr_linii=2; nr_serwera++;}
    nr_linii++;
  }


  cout << "Serwer: " << endl;
  cout << endl;
  for (n_l=1; n_l<=2; n_l++)
  {


    // Petla GUI
    cout << "Numer serwera: " << numer_serwera[n_l] << endl;
    cout << "Nazwa serwera: " << nazwa_serwera[n_l] << endl;
    cout << "Ilosc slotow: " << ilosc_slotow[n_l] << endl;
    cout << "-------------------------------------" << endl;
    cout << endl;
  }
}

int main()
{
  wybor_serwera();
}

 

2 odpowiedzi

+1 głos
odpowiedź 16 sierpnia 2018 przez mokrowski Mędrzec (158,960 p.)

O jej ... ale po co tak.. kazali Ci? 

#include <iostream>
#include <fstream>
#include <string>

struct ServerInfo {
    unsigned number;
    std::string name;
    unsigned slots;
};

ServerInfo get_server_info(std::ifstream& ifile) {
    ServerInfo server_info;
    // TODO: Sprawdzanie strumienia przed wczytaniem pola i ew. diagnostyka
    ifile >> server_info.number >> server_info.name >> server_info.slots;
    return server_info;
}

void show_server_info(const ServerInfo& server_info) {
    std::cout << "Numer serwera: " << server_info.number << '\n'
              << "Nazwa serwera: " << server_info.name << '\n'
              << "Ilość slotów : " << server_info.slots << '\n';
}

int main() {
    std::ifstream file("serwery.txt");
    // TODO: Sprawdzenie czy poprawnie otwarto plik.
    std::size_t servers_counter = 2;
    for(std::size_t i = 0; i < servers_counter; ++i) {
        ServerInfo server_info = get_server_info(file);
        std::cout << '\n';
        show_server_info(server_info);
    }
}

Wczytaj po prostu dany typ danych i ew. sprawdź stan strumienia jeśli chcesz mieć niezawodny kod. Ale nie "dziergaj znaczków" bo osiwiejesz.

komentarz 16 sierpnia 2018 przez Hitoshi1337 Nowicjusz (120 p.)
Dzieki za odpowiedz! dopiero zaczynam z C++ jestem przy kursie 11 M.Z. i niezbyt mi idzie z fstream
0 głosów
odpowiedź 16 sierpnia 2018 przez Qwerty96 Stary wyjadacz (13,580 p.)
if (nr_linii==3){nr_linii=2; nr_serwera++;}
nr_linii++;

Czemu do nr_linii przypisujesz 2, a nie 0?

komentarz 16 sierpnia 2018 przez Hitoshi1337 Nowicjusz (120 p.)
jak dam nr_linii = 0 to nic nie ma na konsoli zadnego napisu

Podobne pytania

0 głosów
1 odpowiedź 297 wizyt
pytanie zadane 23 maja 2020 w C i C++ przez Nabuchadonozor Gaduła (3,120 p.)
0 głosów
1 odpowiedź 561 wizyt
0 głosów
1 odpowiedź 717 wizyt

93,742 zapytań

142,678 odpowiedzi

323,297 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.

...