czytanie plików - co tu nie gra

0

potrzebuje pomocy mam do napisania w sumie niewielki programik, ale nie potrafię
odczytać zawartości takiego pliku:
3
4
6
12
14

kolejne liczby maja trafić do kolejnych elementów tablicy
próbowałam to zrobic tak:

	plik=fopen("plik.dat","r");
	while (!feof(plik)){
		  fscanf(plik,"%d",&liczba);	
	     	  tab[p]=liczba; 	  
		  p++;
                }

ale coś tu nie gra, niektóre liczby są wczytywane dwukrotnie czasem więcej razy ( zazwyczaj ostania )

// Tag <code class="cpp"></code> !!! - Q

0
#include<stdio.h>

main()
{
FILE *plik;
int p=0;
int liczba;
int tab[3];

plik=fopen("c:\dane.txt","r");
        while (!feof(plik)){
						fscanf(plik,"%d",&liczba);      
                       tab[p]=liczba;           
                  p++;
                }

		  printf("%d",tab[0]);
		  printf("%d",tab[1]);
		  printf("%d",tab[2]);
		  printf("%d",tab[3]);
		  printf("%d",tab[4]);
	return 0;
}

przykladowy program [diabel]
sprawdzalem na bc 3.11 i dziala ;P

0

Ja to już nie wiem: czy w jakiejś książce/kursie programowania są takie herezje, czy to naprawdę pozostałość po Pascalu... I wychodzi off-by-one error...

Tego się tak nie robi, feof() zwraca stan PO odczycie!
Robi się np. tak:

while ( fscanf(plik,"%d",&liczba)==1 )
{
    tab[p]=liczba;           
    p++;
}

Po drugie: warto sprawdzić czy plik został otwarty:

if (plik) { tu dopiero odczyt }

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