problem z przypisywaniem elementów do tablicy

0

witam mam taki problem że elementy w tablicy ciągle przyjmują wartość 0 mimo że występuje przypisanie do nich elementów.

#include <iostream>
#include <fstream>
#include <string>
#include <cstdio>
#include <stdio.h>
#include <stdlib.h>
#include <cstdlib>
#include <cstring>


using namespace std;
fstream plik;
struct X { int i; double d; int x; };
double static tablica[5];
double tablica2[5];
//argv[1]=C:\Users\Pawełek\Desktop\pp.txt;
void zczytywanie(string dane){

    int static i=0;
   char ciag_charow[10];


for( i=0 ; i<10 ; i++)
{
 ciag_charow[i] =  (char)dane[i];
}
//cout<<ciag_c
//double aa;
 tablica[i]= atof( ciag_charow);
cout<<tablica[i]<<endl;
//=aa;


++i;
}
int main(){
    	string dane;
	plik.open("pp.txt", ios::in | ios::binary );
	    while(!plik.eof() ){

	getline(plik,dane);
	//cout<<dane<<endl;

	zczytywanie(dane);
	    }
	    plik.close();
	    //memcpy (tablica2,tablica, sizeof(tablica));
	    //

    cout<<tablica[0];

	return 0;
};
 
1

Ten kod to tak straszliwy potwor, ze zaluje, ze sniadanie jadlem.

  1. C++ ma funkcje do zamiany string -> double.
  2. Zawsze masz AV (co wywolanie petli)
  3. Nie wiem jaki jest sens w petli zamieniac string -> char[]
  4. Wczytywanie pliku jest do kitu.

Pawle, nie wiem czy chodzi Ci o to, zeby wczytac kazda linijke do jakiegos pola tablicy, ale to dosc proste...:

#include <fstream>
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
using namespace std;
 
double toDouble(const string& var)
{
    double res;
    istringstream iss(var);
    iss >> res;
    return res;
}
 
int main()
{
    string tmp;
    vector<double> tablica;
    while(getline(cin, tmp))
        tablica.push_back(toDouble(tmp));
    
    cout << tablica[3];
    return 0;
}
 input:

12.1
31.1
3123.4
.52
5235.2

output:

0.52
2
vector<double> data(istream_iterator<double>(fstream("pp.txt")), istream_iterator<double>());
0
vector<double> data(istream_iterator<double>(fstream("pp.txt")), istream_iterator<double>());

Jako, ze @Rev nie dodal slowa komentarze, to moze wyjasnie:

  1. Jedna z postaci konstruktora std::vector przyjmuje 2 argumenty:

    • iterator poczatkowy zbioru, ktorym chcemy wypelnic vector.
    • iterator koncowy tego zbioru.
  2. Do strumieni w C++ tez sa stworzone specjalne iteratory:
    istream_iterator
    ostream_iterator

  3. Co to robi?
    A mianowicie ustawia iterator poczatkowy zbioru, na poczatek pliku "pp.txt", a iterator koncowy na koniec pliku. Wewnetrznie kazda pobrana wartosc jest zamieniana na double i umieszczana w wektorze. Jest to skrocony zapis mniej-wiecej tego co ja zrobilem.

Nie testowalem, ale podejrzewam, ze ten kod sie wykona szybciej od mojego i ogolnie polecalbym uzyc tego.

1 użytkowników online, w tym zalogowanych: 0, gości: 1