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 :)
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ę.
Vasago [ spamer ]
Raf -->Serdecznie dzieki. Bylbym naprawde bardzo zobowiazany :)
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:)
Vasago [ spamer ]
Dzieki :) Zaraz sprobuje go wykorzystac :)
Pozdrawiam
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 :-)
Vasago [ spamer ]
reik -->Dzieki, poprawie :)
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 ;)
Vasago [ spamer ]
Upss. Widze,ze dziala ordynarne przypisanie array[j]=number,a ja kombinuje jak kon pod gore. Przepraszam i wycofuje pytanie ;)