gpt4 book ai didi

c - fscanf 找不到以 s 开头的单词

转载 作者:行者123 更新时间:2023-11-30 20:15:21 26 4
gpt4 key购买 nike

我对 fgets 有一个非常奇怪的行为:

FILE *config;
config = fopen("config.txt", "r");

int health, weapon, speed;
char search[50];

while (fgets(search ,sizeof(search), config) != NULL)
{
fscanf(config, "health: %d", &health);
fscanf(config, "weapon: %d", &current_weapon);
fscanf(config, "speed: %d", &speed);
}

fclose(config);
printf("%i", speed); //prints 0

配置.txt:

health: 350
weapon: 1
speed: 20

如果我改变

fscanf(config, "speed: %d", &speed);

fscanf(config, "wordThatDoesntStartWithS: %d", &speed);

效果很好。为什么?

最佳答案

你的代码 super 奇怪。

fgets() 的要点是读取整行文本。那么您不需要需要使用fscanf(),它从流中读取:您已经读取了一行。使用 sscanf() 处理您刚刚读取的行。

此外,您还需要检查 sscanf() 是否成功,并且(当然)您不能指望从同一行扫描所有三个不同的内容:

char line[1024];

bool got_speed = false, got_health = false, got_weapon = false;
while(fgets(line, sizeof line, config) != NULL)
{
if(!got_speed && sscanf(line, "speed: %d", &speed) == 1)
got_speed = true;
if(!got_health && sscanf(line, "health: %d", &health) == 1)
got_health = true;
if(!got_weapon && sscanf(line, "weapon: %d", &weapon) == 1)
got_weapon = true;
}

上面的内容也可以重构,将 && 的右侧分配给适当的 got_ -flag。

关于c - fscanf 找不到以 s 开头的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20124860/

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