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

fstream zle czyta linie

Object Storage Arubacloud
0 głosów
244 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 (155,460 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ź 168 wizyt
pytanie zadane 23 maja 2020 w C i C++ przez Nabuchadonozor Gaduła (3,120 p.)
0 głosów
1 odpowiedź 298 wizyt
0 głosów
1 odpowiedź 538 wizyt

92,568 zapytań

141,422 odpowiedzi

319,636 komentarzy

61,956 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!

...