gpt4 book ai didi

c - strcmp 和 fscanf 带 While 循环遍历文件

转载 作者:太空宇宙 更新时间:2023-11-04 06:53:02 25 4
gpt4 key购买 nike

我在处理特定代码行时遇到了问题,该代码行出现以下错误

error: invalid conversion from ‘int’ to ‘const char*’

error: initializing argument 1 of ‘int strcmp(const char*, const char*)’

有没有人碰巧知道为什么?这是有问题的代码行。

while (strcmp(fscanf(fr, "%s", words), "DONE") != 0)

本质上,我的代码扫描文件(执行某些操作)直到它到达关键字“DONE”(不带引号),然后退出文件。我是初学者 C 程序员,所以请原谅代码中的任何不准确/低效之处。

完整代码如下。

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

FILE *fr;

struct player {
char name[50];
float DOC;

};

struct player players[50];

int main() {
fr = fopen ("playerinfo.txt", "r");

if (ftell(fr) == 0) {
fclose(fr);
printf("PLAYER FILE IS EMPTY");
return 0;
}

char words[50];

while (strcmp(fscanf(fr, "%s", words),"DONE") != 0) {
float pts;
fscanf(fr, "%f", pts);

float asts;
fscanf(fr, "%f", asts);

float mins;
fscanf(fr, "%f", mins);

struct player *aPlayer;
float theDOC = (pts + asts) / mins;
strcpy(aPlayer->name, words);
aPlayer->DOC = theDOC;
}

fclose(fr);

return 0;
}

最佳答案

在你的代码中,

  strcmp(fscanf(fr, "%s", words),"DONE")

并没有按照您的想法行事。 fscanf() 不返回指向 scanned 字符串的指针,而是返回一个计数(int 类型)。你的编译器警告过你。 <强> Read the man page before you proceed.

这种不当使用会导致警告。

也就是说,您必须检查 scanf() 是否成功函数族,否则,您很有可能最终使用不确定的值(想想 words 的内容,如果扫描失败)。

因此,您将操作分为两部分。

  • 使用fgets()/fscanf()接收输入(如果需要,换行修剪)。检查调用是否成功。
  • 将输入缓冲区与所需字符串 (strcmp()) 进行比较。

也就是说,我真的看不出整个循环有什么意义,因为您将创建一个新的局部变量 aPlayer每次进入循环。我希望你知道你在做什么。

忽略上述情况,通用流程应该是这样的

input = "Not Done";
while ('input' is not "Done")
scan values;
check for succss;
store into variables;
scan next 'input'

关于c - strcmp 和 fscanf 带 While 循环遍历文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48495417/

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