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

problem z wczytaniem pliku w programie code::blocks

0 głosów
36 wizyt
pytanie zadane 14 czerwca w C i C++ przez Nowacx02 Użytkownik (820 p.)
Witam chcę wczytać następujący plik:(oceny.txt)

Krysztof
15
Kasia
18
Marek
9

Napisałem następujący kod w Code::Blocks :

#include <iostream>
#include <fstream>
#include <cstdlib>

using namespace std;

int main()
{
  string linia;
  int nr_linii=1;
  string imie[2];
  int pkt[2];
  fstream plik;
  plik.open("oceny.txt",ios::in);

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

  while(getline(plik,linia))
  {
      switch(nr_linii)
      {
        case 1: imie[0]=linia;              break;
        case 2: pkt[0]=atoi(linia.c_str()); break;
        case 3: imie[1]=linia;              break;
        case 4: pkt[1]=atoi(linia.c_str()); break;
        case 5: imie[2]=linia;              break;
        case 6: pkt[2]=atoi(linia.c_str()); break;
      }
        nr_linii++;
  }
        plik.close();

        for (int i=0; i<=2; i++)
        {
        cout<<"Imie: "<<imie[i]<<endl;
        cout<<"Pkt: "<<pkt[i]<<endl;
        }

    return 0;
}
 W koncsoli wyświetla mi się tylko:

Imie:

Lecz gdy dodam obok zmiennej string imie jakąkolwiek inną np. string imie[2],costam;

Wyświetla się:

Imie: Krysztof
Pkt: 15
Imie: Kasia
Pkt: 18
Imie:
Pkt: 9

Nie ma niestety 5 linii.Co może być problemem w tym kodzie?

1 odpowiedź

0 głosów
odpowiedź 14 czerwca przez Hipcio Maniak (67,980 p.)
string imie[2];
  int pkt[2];

W pliku masz 3 uczniów, a nie 2. To zadanie można zrobić krócej i lepiej bez getline:

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

using namespace std;

int main()
{
	const int data_size = 3;
	string imie[data_size]{};
	int pkt[data_size]{};
	fstream plik;
	plik.open("oceny.txt", ios::in);

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

	for (int i = 0; i < data_size && !plik.eof(); i++)
	{
		plik >> imie[i] >> pkt[i];
	}

	for (int i = 0; i < data_size; i++)
	{
		cout << "Imie: " << imie[i] << endl;
		cout << "Pkt: " << pkt[i] << endl;
	}
}

 

komentarz 14 czerwca przez Nowacx02 Użytkownik (820 p.)
Dzięki, myślałem poprostu że jak zrobie tablice string imie[2] to będzie ona dla 3 uczniów bo tablice numerują sie od 0 czyli 0,1,2

Podobne pytania

0 głosów
3 odpowiedzi 72 wizyt
+2 głosów
3 odpowiedzi 179 wizyt
0 głosów
2 odpowiedzi 620 wizyt
pytanie zadane 3 marca 2016 w C i C++ przez k222 Pasjonat (20,680 p.)
Porady nie od parady
Pytania na temat serwisu SPOJ należy zadawać z odpowiednią kategorią dotyczącą tej strony.SPOJ

54,442 zapytań

98,327 odpowiedzi

202,258 komentarzy

26,743 pasjonatów

Przeglądających: 165
Pasjonatów: 4 Gości: 161

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...