3

私が行った場合 :

int main(){
    const int LENGTH_LINE = 100;
    char line[LENGTH_LINE];
    int len;
    FILE* fp = fopen(file.txt,"r");

    fgets(line,LENGTH_LINE,fp);
    len = strlen(line);
    if(line[len-1] == '\n')
       printf("I've a line");

    //This work if the line have \n , but if the end line of the text dont have \n how can do it?


}

fgets区切り文字を取得したので、行全体を使用するかどうかを知る必要があります。

4

4 に答える 4

4

http://en.cppreference.com/w/c/io/fgetsによると

Reads at most count - 1 characters from the given file stream and stores them in str. 
Parsing stops if end-of-file occurs or a newline character is found, in which case str will contain that newline character.

したがって、fgetsが戻ったら、3つの可能性があります

  1. LENGTH_LINEに到達しました
  2. 改行があります
  3. EOFに達しました。

ケース2と3にラインがあると仮定します。

この場合、検出条件は次のとおりです。

line[len-1] == '\n' || feof(fp)
于 2012-08-22T20:34:55.217 に答える
1

改行文字を確認します。

size_t len = 0;

// ... your code using fgets

len = strlen(line);
if ((len > 0) && (line[len - 1] == '\n'))
    // your input contains the newline

通話後、次のfgets場合、回線の最後に改行がない場合があります。

  • 改行がスキャンされる前に文字数制限に達しました-あなたの場合、これはLENGTH_LINEです。
  • EOF改行の前にファイルの終わり( )に達しました。
  • 読み取りエラーが発生しましたが、エラーが発生した場合は、line使用できない内容を検討してください。

ファイルの終わりまたは読み取りエラー時に:returnsfgetsを処理できるように、からの戻り値を確認する必要があります。を使用して、ファイルの終わりを確認できます。EOFfgetsNULLfeof

をチェックして、エラーfeofなしで入力の最後にいるfgetsことがわかっている場合は、最終行に改行文字がなくても、行全体を読んだことがわかります。

何らかの理由で、それぞれlineを終了する改行文字が必要な場合は、自分で追加できます。

// you've checked for EOF and know this is your final line:
len = strlen(line);
if (line[len-1] == '\n')
    printf("I've a line");
else if ((len + 1) < LENGTH_LINE)
{
    line[len] = '\n';
    line[len + 1] = '\0';
}
else
    // no room in your line buffer for an add'l character
于 2012-08-22T19:31:12.630 に答える
0

代わりにfgetcを使用しないのはなぜですか?そうすれば、行の終わりに到達するまでスキャンを続けることができるので、それがあるかどうかを確認する必要はありません。

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char line[100]; 
    int ch, i = 0;

    FILE* fp = fopen(file.txt,"r");
    while(ch != '\n' || ch != '\r' || ch != EOF)  //or ch != delimiter
    {
        ch = fgetc(fp);
        line[i] = ch;
        i++;
    }
    line[i] = '\n';
    line[i+1] = 0x00;
    return 0;
}

その例では、改行、戻り文字、またはEOF文字を探すだけですが、実際には好きなもの(区切り文字など)を探すことができます。したがって、区切り文字q

while(ch != 'q')...

于 2012-08-22T20:24:03.610 に答える
0

このように使用します

while(fgets(line,LENGTH_LINE,fp)!=EOF)
  // your code here
于 2012-08-22T19:49:36.303 に答える