Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C] Plik jako argument funkcji

Ostatnio zmodyfikowano 2014-01-03 17:50
Autor Wiadomość
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 :)
C/C++
#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;
}
P-101051
pekfos
» 2014-01-03 17:27:07
czy można w jakiś prostu sposób przekazywać plik jako argument dla funkcji?
Można.
P-101052
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...
C/C++
#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;
}
P-101054
« 1 »
  Strona 1 z 1