我不明白这些变量如何用于getchar

时间:2013-12-21 15:46:41

标签: c variables getchar

这是一个从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;
}

1 个答案:

答案 0 :(得分:0)

在您指定的行中,需要使用temp,因为它会向您提供有关正在读取的当前数字的信息(如果是点数,则基本上为-1,如果是数字,则为累计数字:temp = 10*temp + (ch-'0');)。

显然,你不能只看ch,因为那时你无法检查数字是否过高(IP类型的数字需要从0到255)。