0

我对 C 编程有点陌生,我一直遇到这个错误。以前我将 fscanf 与 %lf 一起使用,因为年龄是双倍的,但自从我切换到 fgets 后,我不知道如何让它接受双倍。我正在尝试读入一个结构。这是我的相关代码:

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

给我这个错误:

错误:fgets 的参数 1 的类型不兼容,预期为“char *”,但参数的类型为“double”

4

2 回答 2

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 回答
1

fgets尝试读取一行文本,这不适合您的情况,因为您只对double值感兴趣。

fgets因此,您需要使用fscanf格式double字符串,而不是 using :

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