2

プログラムにテキスト ファイルを出力させることはできますが、特定の行を出力させるにはどうすればよいでしょうか。いくつかの行に同じものがあり、プログラムを実行したときにそれらを印刷したい場合のように?

#include <stdio.h>

int main ( void ){
    static const char filNavn[] = "test.txt";
    FILE *fil = fopen( filNavn, "r" );
    if ( fil != NULL ){
        char line [ 256 ];
        while( fgets( line, sizeof( line ), fil ) != NULL ){
            fputs( line, stdout );
        }
        fclose( fil );
    }
    else{
        perror( filNavn );
    }
    return 0;
}
4

2 に答える 2

1

基本的にあなたがする必要があるのは:

  1. 変数にスロットを格納しますline(あなたが言ったことで44文字)。
  2. strstrライブラリの関数を使用して、文字列が存在するstring.h文字列の位置を見つけ、存在しない場合はポインターを返します。line"2 - 0"NULL
  3. ポインターが でない場合はNULL、行を印刷できます。
  4. このループは、filポインターが に到達するまで続きますend of the file

    if ( fil != NULL ){
    
        /* 44 characters because you said that the data is stored in strings of 44. */
        /* And I will think that you inputed the data correctly. */
        char line [ 44 ];
    
        /* While you don't reach the end of the file. */
        while( !feof( fil ) ){
    
            /* Scans the "slot" of 44 characters (You gave it that format)*/
            /* starting at the position of the pointer fil and stores it in fil*/
            fscanf( fil, %44s, line );
    
            /* If the result of the internal string search (strstr) isn't null. */
            /* Print the line.*/
            if( strstr( line, "2 - 0" ) != NULL ){
                printf( "%s\n", line )
            }
    
            /* Else keep the loop....*/
        }
    
        fclose( fil );
    }
    
于 2012-11-21T02:04:55.300 に答える
-1

条件を読み取り/印刷ループ内に入れるだけです。

含む

int main ( void )
{
    static const char filNavn[] = "test.txt";
    FILE *fil = fopen( filNavn, "r" );
    if ( fil != NULL )
    {
        char line [ 256 ];
        while( fgets( line, sizeof line, fil ) != NULL )
        {
            // if this line is interesting (eg, has something "the same")
               fputs( line, stdout );
        }
        fclose( fil );
    }
    else
    {
        perror( filNavn );
    }
    return 0;
}
于 2012-11-21T01:02:07.800 に答える