这是一个从stdin读取ip地址然后检查它是否正确的程序。 函数“getchar”只链接到变量“ch”而不是变量“temp”,它是如何用于检查输入的? 我的意思是,是不是将IP地址保存为“ch”,如何保存为“temp”变量? (如果我也使用printf for temp,它会显示我输入的ip地址的最后一个字符)
#include <stdio.h>
int main()
{
int ch, dots, bytes, temp;
dots = bytes = temp = 0;
printf("Enter IP address (x.x.x.x): ");
while((ch = getchar()) != '\n' && ch != EOF)
{
if(ch < '0' || ch > '9')
{
if(ch == '.')
{
dots++;
if(temp != -1)
{
if(temp > 255) /* code doesnt work if "temp" here is changed into "ch" */
{
printf("Error: The value of each byte should be in [0, 255]\n");
return 0;
}
bytes++;
temp = -1;
}
}
else
{
printf("Error: Acceptable chars are only digits and dots\n");
return 0;
}
}
else
{
if(temp == -1)
temp = 0;
temp = 10*temp + (ch-'0');
}
}
if(temp != -1)
{
if(temp > 255)
{
printf("Error: The value of each byte should be in [0, 255]\n");
return 0;
}
bytes++;
}
if(dots != 3 || bytes != 4)
printf("Error: The IP format should be x.x.x.x\n");
else
printf("The input address is a valid IPv4 address\n");
return 0;
}
答案 0 :(得分:0)
在您指定的行中,需要使用temp
,因为它会向您提供有关正在读取的当前数字的信息(如果是点数,则基本上为-1,如果是数字,则为累计数字:temp = 10*temp + (ch-'0');
)。
显然,你不能只看ch
,因为那时你无法检查数字是否过高(IP类型的数字需要从0到255)。