你有一个额外的内心世界
k
循环。在第一种情况下,您只有一个输入,但您仍然迭代所有可能未定义行为的元素。
int get_valid_ip_addrs(ipaddr_t addr_array[], int addr_array_len){
int valid_inputs = 0, i, k;
for(i = 0; i < addr_array_len; i++){
scanf("%d%c%d%c%d%c%d", &addr_array[i].octet1, &dot,
&addr_array[i].octet2, &dot,&addr_array[i].octet3, &dot, &addr_array[i].octet4);
/* Condition 1. (if the address is valid) */
if(addr_array[i].octet1 > 0 && addr_array[i].octet1 < 256 &&
addr_array[i].octet2 > 0 && addr_array[i].octet2 < 256 &&
addr_array[i].octet3 > 0 && addr_array[i].octet3 < 256 &&
addr_array[i].octet4 > 0 && addr_array[i].octet4 < 256){
valid_inputs = valid_inputs + 1;
}
/* Condition 2 (if the address is -1.-1.-1.-1) */
else if(addr_array[i].octet1 == -1 &&
addr_array[i].octet2 == -1 &&
addr_array[i].octet3 == -1 &&
addr_array[i].octet4 == -1){
return valid_inputs;
}
/* Condition 3 - if the address is invalid */
else if(addr_array[i].octet1 < 0 || addr_array[i].octet1 > 255 ||
addr_array[i].octet2 < 0 || addr_array[i].octet2 > 255 ||
addr_array[i].octet3 < 0 || addr_array[i].octet3 > 255 ||
addr_array[i].octet4 < 0 || addr_array[i].octet4 > 255){
printf("Invalid input.\n");
}
}
return valid_inputs;
}