• 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
31 wizyt
pytanie zadane 14 czerwca w C i C++ przez Nowacx02 Nowicjusz (230 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 (56,080 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 Nowicjusz (230 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 70 wizyt
+2 głosów
3 odpowiedzi 175 wizyt
0 głosów
2 odpowiedzi 530 wizyt
pytanie zadane 3 marca 2016 w C i C++ przez k222 Pasjonat (18,410 p.)
Porady nie od parady
Możesz ukryć, zamknąć lub zmodyfikować swoje pytanie, za pomocą przycisków znajdujących się pod nim. Nie krępuj się poprawić pochopnie opublikowanego pytania czy zamknąć go po uzyskaniu satysfakcjonującej odpowiedzi. Umożliwi to zachowanie porządku na forum.Przyciski pytania

51,027 zapytań

93,344 odpowiedzi

189,542 komentarzy

24,885 pasjonatów

Przeglądających: 292
Pasjonatów: 13 Gości: 279

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.

...