fscanf不将值放在变量中

时间:2014-09-20 23:44:20

标签: c fgets scanf

我在一个文件中有3个值(用空格分隔),我使用fscanf读入3个变量。出于某种原因,值未被更改。当我打印值时,它打印内存垃圾/我设置其初始值的任何内容。我也尝试过使用带有sscanf的fgets,但没有骰子。

代码:

int numPresale; // The number of presale tickets sold
double costPresale; // The cost of presale tickets
double costDoor;    // The cost of tickets sold at the door

// Opens the file. Exits program if it can't
if((inFile = fopen(fileName, "r")) == NULL) {
    printf("Unable to open the input file '%s'\n", fileName);
    exit(EXIT_FAILURE);
}

// Parse for information
fscanf(inFile, "%.2f %.2f %d", &costPresale, &costDoor, &numPresale);

printf("%.2f %.2f %d", costPresale, costDoor, numPresale);

fclose(inFile);

我确定我犯了一些经典的菜鸟错误,但我在网上找不到任何答案。在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

值不变的原因是fscanf找不到与您指定的格式匹配的值。此外,不需要空格。最后,由于您要将数据读入double而非float,因此您应使用%lf作为格式说明符。

您可以通过查看fscanf的返回值来检查是否收到了正确数量的项目。

这应解决这个问题:

if (fscanf(inFile, "%lf%lf%d", &costPresale, &costDoor, &numPresale) == 3) {
    printf("%.2f %.2f %d", costPresale, costDoor, numPresale);
}

Demo.