我遇到了一个特定的代码行,它给我的错误是
错误:从
的转换无效‘int’
到‘const char*’
错误:初始化
的参数1‘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;
}
答案 0 :(得分:2)
在您的代码中,
strcmp(fscanf(fr, "%s", words),"DONE")
不符合您的想法。 fscanf()
不返回指向扫描的字符串的指针,而是返回计数(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'
答案 1 :(得分:1)
问题在于你的strcmp()函数。的确,当你这样做时:
strcmp(fscanf(fr, "%s", words),"DONE")
您将fscanf(这是一个int)的返回值与const char *
&#34; DONE&#34;进行比较。这是不可能的。您需要直接将words
与"DONE"
进行比较。
您应该执行以下操作:
int test;
test = fscanf(fr, "%s", words);
while ((test != EOF) && (strcmp(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;
test = fscanf(fr, "%s", words);
}