我对 C 编程有点陌生,我一直遇到这个错误。以前我将 fscanf 与 %lf 一起使用,因为年龄是双倍的,但自从我切换到 fgets 后,我不知道如何让它接受双倍。我正在尝试读入一个结构。这是我的相关代码:
double age; ... while(fgets(Employees[i].age, 10, input) != 0)
给我这个错误:
错误:fgets 的参数 1 的类型不兼容,预期为“char *”,但参数的类型为“double”
您可能还想使用 读取整行文本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;
}
fgets
尝试读取一行文本,这不适合您的情况,因为您只对double
值感兴趣。
fgets
因此,您需要使用fscanf
格式double
字符串,而不是 using :
while(fscanf(input, "%lf", &Employees[i].age) == 1)