0

私はCプログラミングに少し慣れていないので、このエラーに遭遇し続けています。以前は age が double だったので %lf で fscanf を使用していましたが、fgets に切り替えて以来、double を受け入れる方法がわかりません。構造体に読み込もうとしています。関連するコードは次のとおりです。

double age;
...
while(fgets(Employees[i].age, 10, input) != 0)

このエラーが表示されます:

エラー: fgets の引数 1 の型は互換性がありません 'char *' が必要ですが、引数の型は 'double' です

4

2 に答える 2

1

fgets値にのみ関心があるため、テキスト行を読み取ろうとしますが、これは状況に適していませんdouble

したがって、を使用する代わりに、フォーマット文字列fgetsを使用する必要があります。fscanfdouble

while(fscanf(input, "%lf", &Employees[i].age) == 1)
于 2012-11-06T21:26:21.327 に答える
1

を使用してテキスト行全体を読み取り、fgets()それを を使用して値に解析することもできますsscanf()

sscanf()最初のパラメーターが文字列ポインターであることを除いて、fscanf()同じように機能します。scanf()

sscanf()一度に行全体を読み取ると、行番号でエラーを報告したり、失敗した場合に別のフォーマット文字列を使用して行を変換したりするなど、特定の操作が簡単になる場合があります。

楽しみのための例:

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

int main()
{
    char buffer[1024];
    const size_t buffer_size = sizeof(buffer);
    int line_number = 0;

    while( fgets(buffer, buffer_size, stdin) ) {
        size_t len = strlen(buffer);
        double value;

        line_number++;

        if( buffer[len-1] == '\n' ) {
            buffer[len-1] = '\0';
            len--;
        }

        if( sscanf(buffer, " %lf", &value) != 1 ) {
            fprintf(stderr, "stdin:%d: Unable to read value: \"%s\" makes no sense.\n", line_number, buffer);
            exit(EXIT_FAILURE);
        }
        printf("Successfully read value %lf\n", value);
    }
    return EXIT_SUCCESS;
}
于 2012-11-06T21:46:52.837 に答える