使用fgets将double存储到struct中

时间:2012-11-06 21:23:59

标签: c struct fgets

我对C编程有点新意,我一直遇到这个错误。以前我使用fscanf和%lf,因为年龄是一个双倍但是因为我切换到fgets,我不知道如何让它接受双倍。我试图读入一个结构。这是我的相关代码:

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

给了我这个错误:

错误:fgets参数1的类型不兼容 期望'char *'但参数类型为'double'

2 个答案:

答案 0 :(得分:1)

fgets尝试读取一行文字,这对您的情况并不理想,因为您只对double值感兴趣。

因此,您需要将fgetsfscanf格式字符串一起使用,而不是使用double

while(fscanf(input, "%lf", &Employees[i].age) == 1)

答案 1 :(得分:0)

您可能还想使用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;
}