如何解决如何从此 .txt 文件中获取此信息并在我的代码中正确使用它C 语言
我在学校的 C 语言编码作业需要一些帮助。我不知道如何使这段代码工作。
任务是从名为“ingredientList.txt”的文本文件中输入成分的价格和卡路里,该文件具有固定的成分及其价格和卡路里。
价格和卡路里将分别在成分名称下。
这是文件:
ingredient1
90.00
410
ingredient2
0.00
20
ingredient3
0.00
10
ingredient4
30.00
60
ingredient05
40.00
150
我需要输入我想要的配料数量,最后计算总价和卡路里。
这是输入示例:
ingredient1: 3
ingredient2: 1
ingredient3: 0
ingredient4: 4
ingredient5: 6
输出应该是这样的:
price: 630.00
calories: 2380
这是我的代码:
#include<stdio.h>
#include<string.h>
typedef struct ingredients
{
int in1,in2,in3,in4,in5;
} list;
int main()
{
FILE *fp;
fp=fopen("ingredientsList.txt","r");
list in;
int totalPrice=0,totalCalories=0,tempi,tempf;
//tempi and tempf are used as temporary variables for integer and float variables respectively
char name[100];
printf("ingredient1: ");scanf("%d",&in.in1);
printf("ingredient2: ");scanf("%d",&in.in2);
printf("ingredient3: ");scanf("%d",&in.in3);
printf("ingredient4: ");scanf("%d",&in.in4);
printf("ingredient5: ");scanf("%d",&in.in5);
//This is the part where I scan the price and calories from the file
while(fgets(name,100,fp)!=NULL)
//This part will scan the name of the ingredient and stop the loop if it reached the last line
{
if(strcmp(name,"ingredient1\n")==0)
{
fscanf(fp,"%f",&tempf);
fscanf(fp,"%d",&tempi);
totalPrice+=tempf*(in.in1);
totalCalories+=tempi*(in.in1);
}
else if(strcmp(name,"ingredient2\n")==0)
{
fscanf(fp,&tempi);
totalPrice+=tempf*(in.in2);
totalCalories+=tempi*(in.in2);
}
else if(strcmp(name,"ingredient3\n")==0)
{
fscanf(fp,&tempi);
totalPrice+=tempf*(in.in3);
totalCalories+=tempi*(in.in3);
}
else if(strcmp(name,"ingredient4\n")==0)
{
fscanf(fp,&tempi);
totalPrice+=tempf*(in.in4);
totalCalories+=tempi*(in.in4);
}
else if(strcmp(name,"ingredient5\n")==0)
{
fscanf(fp,&tempi);
totalPrice+=tempf*(in.in5);
totalCalories+=tempi*(in.in5);
}
}
printf("price: %.2f",totalPrice);
printf("\ncalories: %d",totalCalories);
fclose(fp);
}
我输入了输入示例,这是输出:
price: 0.00
calories: 0
我知道问题出在扫描部分,但我不知道如何解决。
如果你能就此给我一些建议,那将是我的荣幸。
编辑1: 我尝试调试,发现程序在while循环中没有运行任何函数,这意味着程序认为fgets(name,fp)==NULL,但这怎么可能,我该如何解决,我理解错了吗?
解决方法
您已将 totalPrice 和 tempf 声明为 int:
int totalPrice=0,totalCalories=0,tempi,tempf;
将它们更改为浮动:
int totalCalories=0,tempi;
float totalPrice=0,tempf;
您示例中的总卡路里不是 2380: 3 * 410 + 1 * 20 + 0 * 10 + 4 * 60 + 6 * 150 = 2390
你的成分.txt文件中也有一个错字,将成分05更改为成分5。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。