我正在学习C语言中的结构,我编写了一个程序,该程序应读取最多100个地址和昵称的列表,并打印一条消息列表,以标识同一位置的每对计算机,即在地址的前两个部分中具有匹配值的每对计算机。由于某种原因,我的程序将始终打印少于5件的物品。我似乎无法弄清楚我做错了什么。任何帮助表示赞赏。
C代码:
AndroidManifest
文本文件:
PendingIntent
答案 0 :(得分:2)
请务必阅读@melpomene的链接,以链接到Eric Lippert关于调试小程序的出色文章。
您有两个问题。首先是您的scanf()
格式字符串不允许IP地址八位位组之间的小数位。文件中存在意外的定界符(十进制)会导致第一次扫描之后的所有扫描转换均失败,因此它返回1,从而触发您看到的打印。将格式字符串更改为"%d.%d.%d.%d %s"
。
第二个原因是,在scan_address()
中,您要递增i
在之前测试终结线。换句话说,运行此检查时:
if(adds[i].xx==0 && adds[i].yy==0 && adds[i].zz==0 && adds[i].mm==0)
您已经递增i
指向下一条记录,并且正在测试未初始化的内存。这实际上是未定义的行为,但很有可能该内存“偶然”包含零,从而触发了输入结束检查。在递增if
之前,您可以将break
(和if (status == 5)
)上移到i
代码块中。
有了这些更改,我得到了:
ipaddress.txt was succesfully imported with 8 record
Machines green and red are on the same local network
111 22 3 44 green
111 22 6 77 red
Machines blue and yellow are on the same local network
222 33 4 55 blue
222 33 8 99 yellow
Machines cyan and black are on the same local network
333 44 1 22 cyan
333 44 2 33 black