Wczytywanie danych z pliku w C

0

Witam,
co należy zmienić by program wczytywał z pliku liczby dziesiętne? Przy całkowitych wszystko działa lecz gdy pojawi się jakaś w pliku.txt liczba z przecinkiem n 1,23 program szaleję. Oto kod:

 

     double tab[100];
     int i;
     FILE *dane;
     dane=fopen("C:\\Users\\Gateway-NV55\\Desktop\\projekt\\pli  k.txt","r");
     if(dane==NULL) printf("W tym katalogu nie ma takiego pliku\n");
     else
     {
           for(i=0;i<100;i++)
           {
                 if(feof(dane)) break;/*jeśli koniec pliku kończy pobieranie*/
                 fscanf(dane,"%d",&tab[i]);
                 printf("Oto %d. liczba %f\n",i+1,tab[i]);
           }
     }
0

%lf

0

Po zmianie w kodzie na:

 
double tab[100];
FILE *dane;
     dane=fopen("C:\\Users\\Gateway-NV55\\Desktop\\projekt\\plik.txt","r");
     if(dane==NULL) printf("W tym katalogu nie ma takiego pliku\n");
     else
     {
           for(i=0;i<100;i++)
           {
                 if(feof(dane)) break;/*jeśli koniec pliku kończy pobieranie*/
                 fscanf(dane,"%lf",&tab[i]);
                 printf("Oto %d. liczba %lf\n",i+1,tab[i]);
           }
     }

Program dalej nie wczytuję liczb dziesiętnych z pliku.txt po prostu sięga gdzieś pamięcią w nieokreślone miejsca...

0

Pokaż jak wygląda plik?
Jeżeli są tam przecinki zamiast kropek to pomoże:
setlocale(LC_NUMERIC,"");
Z tym że będzie kłopot jeżeli w systemie też masz ustawiony znak dziesiętny na '.'
Można też użyć:
setlocale(LC_NUMERIC,"polish");

0

plik.txt w którym mam przykładowe liczby:
2 2 3
16 1,25 23,1
46,02 6 1,12

dla kropek wstawionych zamiast przecinka występuje ten sam problem. A gdzie wstawić tą deklarację? Przepraszam ale programowaniem zajmuję się od niecałych 4 miesięcy więc nie mam zbyt dużej wprawy i wiedzy.

0

Jeżeli dla kropek ten problem występuje to spróbuj zamienić na %f w scanf oraz w printf
Tą instrukcję wystarczy wstawić raz przed tym wczytywaniem.
http://ideone.com/A3q5PU

0

setlocale(LC_NUMERIC,""); pomógł jeżeli chodzi o przecinki gorzej jest jak w tym pliku pojawiają się kropki obserwuję to samo co wcześniej. Wiesz może czemu tak się dzieje?

0

Teraz mam problem z sortowaniem liczb dziesiętnych... Sortowanie liczb całkowitych nie stanowi problemu lecz przy liczbach dziesiętnych przepisuję wartości odczytane z pliku nie sortując ich. Macie może jakieś sugestie?

	for(j; j<n; j++)
	{
        for(i=0; i<n-1; i++)
		{
             if(tab[i]>tab[i+1])
			 {
                t=tab[i];
                tab[i]=tab[i+1];
                tab[i+1]=t;
            }
        }
    } 
    printf("\nPosortowane:\n");  
    for(i=0; i<n; i++) 
	printf("%f\n", tab[i]); 
0

Dzięki za wszelkie podpowiedzi już doszedłem co nie tak zrobiłem. No chyba, że jeszcze ktoś ma sugestie dotyczące tych kropek

0
char c;
    c=getchar();
    while(c!=EOF)
    {
                 if(c=='.')
                 puts(",");
                 else
                 putchar(c);
                 c=getchar();
                 } 

Jak umieścić taki kod zmieniający kropki na przecinki w programie wczytujące dane? Co należało by zrobić by to działało i przed wczytaniem liczb zmieniło ewentualne kropki na przecinki?

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