我对C编程有点新意,我一直遇到这个错误。以前我使用fscanf和%lf,因为年龄是一个双倍但是因为我切换到fgets,我不知道如何让它接受双倍。我试图读入一个结构。这是我的相关代码:
double age; ... while(fgets(Employees[i].age, 10, input) != 0)
给了我这个错误:
错误:fgets参数1的类型不兼容 期望'char *'但参数类型为'double'
答案 0 :(得分:1)
fgets
尝试读取一行文字,这对您的情况并不理想,因为您只对double
值感兴趣。
因此,您需要将fgets
与fscanf
格式字符串一起使用,而不是使用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;
}