gpt4 book ai didi

C 读取文件行并打印它们

转载 作者:行者123 更新时间:2023-12-04 11:42:30 24 4
gpt4 key购买 nike

我想读取一个 .dat 文件,其第一行由一个 float 组成,所有连续行都是“int * int”或“int/int”,并打印或返回 float 是否是每次除法或乘法的结果。我对我得到的结果非常不满意。我的经验仅限于几个小时的 C 语言。因此,我不知道该程序缺少什么来执行代码看起来应该执行的操作。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int countlines(FILE* f){
int nLines = -1;
char xLine[10];
while(fgets(xLine,10,f)!=NULL){
nLines+=1;
}
return nLines;
}

int main(){

FILE * fPointer = fopen("test.dat", "r");

float dpFloat;
char oprnd[10];
int frstInt;
int scndInt;

//get float from first line
fscanf(fPointer, "%f", &dpFloat);

//count amount of lines below float
int amtLines = countlines(fPointer);

//loop through the other lines and get
int i;
for (i = 0; i < amtLines; i++){

fscanf(fPointer, "%d %s %d", &frstInt, oprnd, &scndInt);

//checking what has been read
printf("%d. %d %s %d\n", i, frstInt, oprnd, scndInt);

//print 1 if firstline float is quot/prod of consecutive line/s
//else 0
if (strcmp(oprnd,"*") ==1) printf("%i\n", (frstInt*scndInt)==dpFloat);
if (strcmp(oprnd,"/") ==1) printf("%i\n", (frstInt/scndInt)==dpFloat);

}

fclose(fPointer);
return 0;
}

最佳答案

问题 1:当参数相等时,strcmp 返回 0,而不是 1。
问题 2:frstInt/scndInt 将截断结果。通过将 1.0* 添加到表达式来修复它。

线条

    if (strcmp(oprnd,"*") ==1) printf("%i\n", (frstInt*scndInt)==dpFloat);
if (strcmp(oprnd,"/") ==1) printf("%i\n", (frstInt/scndInt)==dpFloat);

需要

    if (strcmp(oprnd,"*") == 0) printf("%i\n", (frstInt*scndInt)==dpFloat);
if (strcmp(oprnd,"/") == 0) printf("%i\n", (1.0*frstInt/scndInt)==dpFloat);
// ^^^ ^^^

请注意比较 float 的陷阱。最好在公差范围内比较它们。参见 Comparing floating point numbers in C获取一些有用的提示。

关于C 读取文件行并打印它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33355599/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com