GRY-Online.pl --> Archiwum Forum

C++ - praca z plikami

08.10.2004
19:31
[1]

Vasago [ spamer ]

C++ - praca z plikami

Mam problem z napisaniem funkcji przyjmujacej dane z pliku. Chcialbym zeby otworzyla go i zapisala zwarty w nim ciag liczb jako wartosci tablicy int array. W ponizszym kodzie miala to robic funkcja text(). Niestety nie robi i nie wiem czemu.

#include <fstream.h>
#include <string.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>

int array[25];
int degree;

void text();
void manual();
void menu();
void end();
int polynomial(int x);

const int max=10;


int main()

menu();
int a;
std::cout<<"Choose x\n";
std::cin>>a;
std::cout << array[1] <<"\n";
std::cout << "The final result is " << polynomial(a) << "\n";

end();
return 0;



void text()


std::cout << "Enter degree of the polynomial (max " << max << ")\n";
std::cin >> degree;
if(degree>max)
‹std::cout << "The limit is set to 10. Choose again please\n";
main();

char file_name[256];
std::cout << "Which file do you want to open?\n";
std::cin>>file_name;
FILE *input;
fopen("file_name","r");
if (!input)
‹std::cout<<"Sorry, error during opening. Try again,please\n";
main();›

for (int j=0; j<=degree; j++)

fscanf(input,"%d", &array[j]);


fclose(input);



void manual()


std::cout << "Enter degree of the polynomial (max " << max << ")\n";
std::cin >> degree;
for(int i=0; i<=degree;i++)

std::cout << "Enter coefficient for x^" <<i<< "\n";
std::cin>>array;





void menu()

int choice;
std::cout<< "********** menu **********\n";
std::cout << "[1] Read from a file\n";
std::cout << "[2] Enter data from a keyboard\n";
std::cout << "[3] Exit program\n";
std::cin >> choice;

switch(choice)

case 1:
text();
break;
case 2:
manual();
break;
case 3:
end();
break;
default:
std::cout << "Wrong number. Choose once again\n";
menu();
break;



void end()

std::cout << " Do you want to close the program?\n\n";
std::cout << "[1] Close the program\n";
std::cout << "[2] Go back to menu\n";
int close;
std::cin >> close;
switch(close)

case 1:
std::cout << "The program will be closed\n";
break;
case 2:
main();
break;
default:
std::cout << "Wrong parameter. Only [1/2] ale allowed\n";
end();
break;




int polynomial(int x)


int value=array[degree];
for (int i=degree; i>=1; i--)
‹ value= (value)*x + array[i-1];

return value;




Probowalem juz nawet pisac malutka funkcje,ktora tylko otwieralaby plik i wyswietlala go na ekranie (zeby wyeliminowac ewentualny wplyw bledow z innych funkcji)ale ta tez nie dziala. Zamiast ciagu licz z pliku pokazuja sie same zera a skompilowany program wywala blad i windows go zamyka.

int main()

char nazwapliku[100];
std::cout << "Wpisz nazwe\n";
std::cin >> nazwapliku;
FILE *plik;
plik=fopen("nazwapliku","r");
std::cout << plik << "\n"; \\tu mam najwieksze watpliwosci
fclose(plik);
return 0;


To moje poczatki w C++. Nigdy nie robilem nic z plikami. Te dwa przyklady pokazuja ze popelniam podobny blad,ale nie umiem sam go znalezc. Pomozcie dobrzy ludzie :)

08.10.2004
19:43
[2]

Raf [ Pretorianin ]

Zasadniczy błąd jest taki, że Ty tylko otwierasz uchwyt do pliku. Aby wczytywać kolejne np: linie musisz pobierać z pliku każdą linię z osobna, aż do eof'a. Jak będę miał chwilkę, to Ci to napiszę.

08.10.2004
19:45
[3]

Vasago [ spamer ]

Raf -->Serdecznie dzieki. Bylbym naprawde bardzo zobowiazany :)

08.10.2004
20:26
[4]

Raf [ Pretorianin ]

Poniżej przedstawiam Ci przykład wczytywania plików tekstowych w C++ (w wersji strumieniowej). Jeśli chciałbyś wczytywać całe linijki tekstu, to trzeba by skorzystać np: z funkcji getline(). Z góry mówię, że nie przeglądałem Twojego całego programu, jedyne co mi się rzuciło w oczy - tablice w C (i C++) indeksuje się od 0. Mój prosty programik napisałem w Builderze i tam na pewno działa.

#include <iostream.h>
#include <fstream.h>
#include <conio.h>

int main(int argc, char* argv[])

char name[100];
ifstream in; //Otwarcie strumienia do czytania
int number;

cout <<"Name"<<endl;
cin >> name;
in.open(name,ios::in);

if (!in)

cout << "Error" << endl;
getch();
return 0;


while (!in.eof())

in >> number;
cout << number <<endl;


getch();
return 0;



Kod mógłby być lepszy, ale ze względu na brak czasu jest taki jak jest:)

08.10.2004
20:29
[5]

Vasago [ spamer ]

Dzieki :) Zaraz sprobuje go wykorzystac :)

Pozdrawiam

08.10.2004
20:43
[6]

reik [ Pretorianin ]

Masz w swoim kodzie kawałek:

[..]
FILE *input;
fopen("file_name","r");
if (!input)
‹std::cout<<"Sorry, error during opening. Try again,please\n";
[..]

Niestety nigdzie nie przypisujesz wartości pod zmienną input (i program pewnie się wywala na pisaniu po pamięci).
Poprawnie powinno to wyglądać tak:

[..]
FILE *input = fopen("file_name","r");
if (!input)
‹std::cout<<"Sorry, error during opening. Try again,please\n";
[..]

spróbuj i zobaczysz że zadziała :-)

08.10.2004
20:55
[7]

Vasago [ spamer ]

reik -->Dzieki, poprawie :)

09.10.2004
13:34
[8]

Vasago [ spamer ]

Niestety musze podbic temtam. Wersja Rafa u mnie dziala,wersja reika niestety nie. Poniewaz jednak to co napisal Raf diametralnie rozni sie od metody jakiej probowalem uzywac, to niestety nie umiem tego rozwinac. Dlatego ostatnie (mam nadzieje ;) ) pytanie. Plik juz sie otwiera. Program wyswietla na ekranie kolejne zawarte w nim wartosci. Co mam teraz zrobic zeby zapisal je w tablicy intow? Probowalem cos takiego...
int j=0;
while(!in.eof())


in>>number;
std::cout<< number<< "\n";
fscanf(number, "%d", &array[j]);
j++;



...ale nie dziala. Funkcja fscanf wogole nie przyjmuje zmiennej number. Pomozcie bo to ostatnie linijki kodu i ciagle sie z nimi morduje ;)

09.10.2004
13:46
[9]

Vasago [ spamer ]

Upss. Widze,ze dziala ordynarne przypisanie array[j]=number,a ja kombinuje jak kon pod gore. Przepraszam i wycofuje pytanie ;)

© 2000-2024 GRY-OnLine S.A.