C语言fscanf读取TXT文档时多词字段被拆分为两行的异常问题
问题解决方案
根本原因
C标准库中fscanf的%s格式化符默认匹配规则为遇到任意空白字符(空格、换行、制表符等)就终止读取。你的代码中用%s匹配最后一个国家字段,当国家名带空格(如North Korea)时,只会将空格前的部分读入drzava字段,空格后的剩余内容会留在文件缓冲区,被下一轮循环读取匹配到第一个字段,最终导致输出错位、内容拆分换行。
修复方案
将Ucitavanje函数中fscanf的最后一个%s替换为%[^\n]即可,%[^\n]的匹配规则是读取所有字符直到遇到换行符为止,可以完整读取行末带空格的国家名字段。
修改后的读取代码行如下:
while (fscanf(sport_medals," %[^|]| %d %s %[^\n]", s.ime_sporta, &s.godina, s.osvojena_medalja, s.drzava) == 4) {
注意事项
请确保结构体中drzava数组的MAXSIZE定义足够大,能够容纳最长的国家名字符串,避免出现缓冲区溢出问题。
内容的提问来源于stack exchange,提问作者Nenad Stakić
相关产品推荐
相关产品推荐

