我需要为学校制作一个C应用程序而且我会陷入困境。我用一个工作正常的文件填充我的结构,除了它只是打印一个随机整数的时候我猜?
我的代码:
char buffer[20];
int i;
for(i = 0; i < 10; i++) {
fgets(buffer,20,fp);
apcWordList[i].pcWord = strdup(buffer);
apcWordList[i].cMaxScore = 0;
apcWordList[i].tTime = time(NULL);
}
fclose(fp);
现在我想要做的就是这个(sSecretWord是这个人猜到的词,并得出他猜测这个词所得到的分数):
for(i = 0; i < 10; i++) {
fgets(buffer,20,fp);
if(apcWordList[i].pcWord == sSecretWord && score > apcWordList[i].cMaxScore) {
apcWordList[i].cMaxScore = score;
apcWordList[i].tTime = time(NULL);
}
}
但它崩溃了,我真的很困惑如何比较变量并在需要时更改它们。我希望我已经解释得很好,我的英语读得很好。
答案 0 :(得分:2)
假设pcWord
是char *
,您无法在大多数情况下使用==
来比较该指针。
C中没有字符串数据类型,字符串永远不是单个值。
您必须使用strcmp()
:
if(strcmp(apcWordList[i].pcWord, sSecretWorD) == 0 &&
score > apcWordList[i].cMaxScore)
其余的代码没什么意义,我很害怕。循环有拼写错误,fgets()
和if
之间没有连接。我认为fgets()
根本不应该在代码的第二部分。
答案 1 :(得分:0)
if
条件
apcWordList[i].pcWord == sSecretWord
比较它们评估的内存地址,而不是存储在那些内存位置的值,这可能是你想要的。您应该使用strcmp
来比较上面两个变量所指向的字符串。
strcmp(apcWordList[i].pcWord, sSecretWorD) == 0