[C] Plik jako argument funkcji
Ostatnio zmodyfikowano 2014-01-03 17:50
Mutiny Temat założony przez niniejszego użytkownika |
[C] Plik jako argument funkcji » 2014-01-03 17:25:19 Hej, mam do napisania program w c który mając dany plik.txt z wyrazami zliczy i poda maksymalną liczbę wystąpień wyrazu 'abc' w jedej linijce tj dla danych asdb abc akdj abc abc abc abc abc abc abc asd asd ada Program zwróci 5 Napisałem, działa, ale mam pytanko, czy można w jakiś prostu sposób przekazywać plik jako argument dla funkcji? Wiem że można niby globalnie, ale ja chciałbym plik otworzyć w main() Poniżej wklejam kod programu, z góry dziękuję za pomoc :) #include <stdio.h> #include <string.h> #include <conio.h> #define SLOWO "abc" int funkcja( int dl_lin );
int main() { int dl_lin; printf( "podaj maksymalna dlugosc lini w pliku tekstowym\n" ); printf( "UWAGA:\nPrzy podaniu innej dlugosci niz rzeczywista \nniektore rezultaty moga zostac pominiete!\n" ); scanf( "%d", & dl_lin ); printf( "Ilosc wystapien w jednej linii wyrazu 'abc' to: %d\n", funkcja( dl_lin ) ); printf( "Program konczy dzialanie nacisnij dowolny klawisz...\n" ); getch(); return 0; } int funkcja( int dl_lin ) { int maks = 0; int maks2 = 0; FILE * plik; plik = fopen( "plik.txt", "r" ); if( plik == NULL ) { printf( "Blad przy otwieraniu pliku plik.txt.\n" ); return - 1; } int k = strlen( SLOWO ); while( !feof( plik ) ) { char pom[ dl_lin ]; maks2 = 0; if( fgets( pom, dl_lin, plik ) ) { int m = strlen( pom ); int i = 0; while( i < m ) { int wystepuje_SLOWO; if( i >= m - k ) wystepuje_SLOWO = 0; else { wystepuje_SLOWO = 1; int j; for( j = 0; j < k; j++ ) if( SLOWO[ j ] != pom[ i + j ] ) { wystepuje_SLOWO = 0; break; } } if( wystepuje_SLOWO ) { i = i + k; maks2++; } else { i++; } } } else { break; } if( maks2 > maks ) { maks = maks2; } } fclose( plik ); return maks; }
|
|
pekfos |
» 2014-01-03 17:27:07 czy można w jakiś prostu sposób przekazywać plik jako argument dla funkcji? |
Można. |
|
Mutiny Temat założony przez niniejszego użytkownika |
» 2014-01-03 17:50:59 A byłbyś łaskaw go zdradzić ;) ? EDIT: Dobra mam to w sumie banalne było... #include <stdio.h> #include <string.h> #include <conio.h> #define SLOWO "abc" int funkcja( int dl_lin, FILE * plik );
int main() { int dl_lin; FILE * plik; plik = fopen( "plik.txt", "r" ); if( plik == NULL ) { printf( "Blad przy otwieraniu pliku plik.txt.\n" ); return - 1; } printf( "podaj maksymalna dlugosc lini w pliku tekstowym\n" ); printf( "UWAGA:\nPrzy podaniu innej dlugosci niz rzeczywista \nniektore rezultaty moga zostac pominiete!\n" ); scanf( "%d", & dl_lin ); printf( "Ilosc wystapien w jednej linii wyrazu 'abc' to: %d\n", funkcja( dl_lin, plik ) ); printf( "Program konczy dzialanie nacisnij dowolny klawisz...\n" ); getch(); return 0; } int funkcja( int dl_lin, FILE * plik ) { int maks = 0; int maks2 = 0; int k = strlen( SLOWO ); while( !feof( plik ) ) { char pom[ dl_lin ]; maks2 = 0; if( fgets( pom, dl_lin, plik ) ) { int m = strlen( pom ); int i = 0; while( i < m ) { int wystepuje_SLOWO; if( i >= m - k ) wystepuje_SLOWO = 0; else { wystepuje_SLOWO = 1; int j; for( j = 0; j < k; j++ ) if( SLOWO[ j ] != pom[ i + j ] ) { wystepuje_SLOWO = 0; break; } } if( wystepuje_SLOWO ) { i = i + k; maks2++; } else { i++; } } } else { break; } if( maks2 > maks ) { maks = maks2; } } fclose( plik ); return maks; }
|
|
« 1 » |