wragler Opublikowano 11 Czerwca 2005 Zgłoś Opublikowano 11 Czerwca 2005 (edytowane) Witam CO moze oznaczac blad w kodzie ? " implicit declaration of function `int atof(...)'" while(fscanf(plik_we, "%s", buff) != EOF) { a[p] = (float)atof(buff); p++; } Z gory dzieki za pomoc Oto caly program: #include<stdio.h> #include<conio.h> float a[176]; void sortuj(int i_el) { int zmiana=0, i; float temp; do { zmiana=0; for(i=1;i<i_el;i++) if(a[i-1]>a[i]) { temp=a[i]; a[i]=a[i-1]; a[i-1]=temp; zmiana++; } } while(zmiana>0); } void main(void) { FILE * plik_we; FILE * plik_wy; int p; plik_we=fopen("wyniki.txt","r"); if(plik_we == NULL) return; p = 0; char buff[80]; while(fscanf(plik_we, "%s", buff) != EOF) { a[p] = (float)atof(buff); p++; } fclose(plik_we); printf("Tablica załadowana:\n"); sortuj(176); plik_wy = fopen("wynikipos.txt","w"); for(p = 0; p < 176; p++) fprintf(plik_wy, "%f\n", a[p]); fclose(plik_wy); printf("Tablica posortowana i zapisana do pliku\n"); getch();} a oto tablica 460.7193 1.035544 10.0175 0.017589 470.7314 1.072443 20.0349 0.034988 480.7431 1.110642 30.0523 0.052487 490.7547 1.150441 40.0698 0.069986 500.7660 1.191840 50.0872 0.087585 510.7771 1.234939 60.1045 0.105184 520.7880 1.27998 70.1219 0,122883 530.7986 1.327037 80.1392 0.140582 540.8090 1.376436 90.1564 0.158481 550.8192 1.428135 100.1736 0.176380 560.8290 0.194479 570.8387 1.539933 120.2079 0.212678 580.8480 1.600332 130.2250 0.230977 590.8572 1.664331 140.2419 0.249376 600.8660 1.732130 610.8746 1.804029 160.2756 0.286774 620.8829 1.880728 170.2924 0.305773 60.8910 1.962627 180.3090 0.324972 640.8988 2.050326 190.3256 0.344371 650.9063 2.144525 200.3420 0.364070 150.2588 0.267975 660.9135 2.246024 210.3584 0.383969 670.9205 2.355923 220.3746 0.404068 680.9272 2.475122 230.3907 0.424567 690.9336 2.605121 240.4067 0.445266 700.9397 2.747520 250.4226 0.466365 710.9455 2.904219 260.4384 0.487764 720.9511 3.077718 270.4540 0.509563 730.9563 3.270917 280.4695 0.531762 740.9613 3.487416 290.4848 0.554361 750.9659 3.732115 300.5000 0.577460 760.9703 4.010814 310.5150 0.600959 770.9744 4.331513 320.5299 0.624958 780.9781 4.704612 330.5446 0.649457 790.9816 5.144611 340.5592 0.674556 800.9848 5.671310 350.5736 0.700255 810.9877 6.31389 360.5878 0.726554 820.9903 7.11548 370.6018 0.753653 830.9925 8.14437 380.6157 0.781352 840.9945 9.5144 6 390.6293 0.809851 850.9962 11.43015 400.6428 0.839150 860.9976 14.30074 410.6561 0.869349 870.9986 19.08113 420.6691 0.900448 880.9994 28.63632 430.6820 0.932547 890.9998 57.29001 440.6947 0.965746 901.0000 450.7071 1.000045pozdrawiam Edytowane 11 Czerwca 2005 przez wragler Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
kojok Opublikowano 11 Czerwca 2005 Zgłoś Opublikowano 11 Czerwca 2005 Musisz jeszcze dolaczycc stdlib: #include <stdlib.h> Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
wragler Opublikowano 11 Czerwca 2005 Zgłoś Opublikowano 11 Czerwca 2005 (edytowane) Dzieki dziala doskonale. Mam jeszcze jeden problem CHce aby program czytal mi pierwsza liczbe z pliku i przypisywal do zmiennej n.(bedzoe to liczba calkowita) Mysle ze warto uzyc funkci "atof". W jaki sposob top zrobic? Bede wdzieczy za pomoc. #include <stdio.h>#include<conio.h>#include <stdlib.h> void main(void){ FILE * plik_we; int n,;char buff[1];plik_we=fopen("wyniki.txt","r"); fscanf(plik_we,"%d", n);a[p]=(float) atof(buff);printf("%f",n)getch();} Edytowane 11 Czerwca 2005 przez wragler Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ojejku Opublikowano 12 Czerwca 2005 Zgłoś Opublikowano 12 Czerwca 2005 (edytowane) masz tam same błędy w tym kodzie, napisz dokładnie co chcesz zrobić. Jeśli ma pobierać z pliku zmienną typu integer to po co Ci później przypisywanie do tablicy a[] - jak przez samo wywołąnie funkcji fscanf(...,n) wczytuje z pliku do n. ( na dodatek a[], nie jest zdefiniowana ) - zmiennej typu float zwracanej przez funkcję atof() ( i tu też przesyłasz niezdefiniowaną zmienną buff :o ). ATOF() jeśli dobrze pamiętam to zamienia string na float'a, więc parametrem przesyłanym musi być string. Czyli buff ma być "stringiem". Jeśli plik nie jest binarny tylko tekstowy to nie możesz %d pobierać bo dostaniesz śmieci. Najprostszy kod: #define MAX_DLUGOSC 100 #define NAZWA_PLIKU "wyniki.txt" int n; FILE *plik = NULL; char buf[MAX_DLUGOSC]; if( plik = fopen( NAZWA_PLIKU, "r" ) { fscanf(plik, "%s", buf ); // pobiera do buf string z plik. n = atoi(buf) // zamienia buf na integer i zwraca do n fclose(plik); } jak dobrze pamiętam to jest atoi() do zamiany stringa na integer. Edytowane 12 Czerwca 2005 przez ojejku Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...