涉及C语言结构的ip地址程序的问题

时间:2018-12-05 22:37:37

标签: c

我正在学习C语言中的结构,我编写了一个程序,该程序应读取最多100个地址和昵称的列表,并打印一条消息列表,以标识同一位置的每对计算机,即在地址的前两个部分中具有匹配值的每对计算机。由于某种原因,我的程序将始终打印少于5件的物品。我似乎无法弄清楚我做错了什么。任何帮助表示赞赏。

C代码:

AndroidManifest

文本文件:

PendingIntent

1 个答案:

答案 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