键入两个点的情况应该打印不?

时间:2017-02-11 16:45:33

标签: c

首次发布此处,此代码存在问题。 我希望它在有超过1个点时打印否,例如' 2..5'。 试图将以下if语句:

if(num[i] == '..'){
printf("no \n);}
然而,没有成功。 我是编程新手!

    #include <stdio.h>
    #include <string.h>

    int main(int argc, char *argv[])
    {
        char *num = argv[1];

        if (num[0] == '+' && strlen(num) >= 2 || num[0] == '-' && strlen(num) >= 2 || num[0] == '.' || (num[0] >= '0' && num[0] <= '9'))
        { 
            for (int i = 1; i < strlen(num); i++) { 
                if (!(num[i] == '.' || (num[i] >= '0' && num[i] <= '9')) ) {  
                    printf("no \n"); 
                }
            }
            printf("yes \n");                  
        } else {
            printf("no \n");
        }
    }
}

2 个答案:

答案 0 :(得分:0)

使用此:

if(!(strcmp(num[i], ".."))) 

而不是

if(num[i] == '..')

答案 1 :(得分:0)

解析数字并非无足轻重。但是以下工作:

double parsenum(const char *num)
{
    unsigned int i=0;
    int neg= 1;
    double result= 0.0;
    int nFraction=1;

    while (num[i]=='-' || num[i]=='+') {
        neg= neg * (num[i]=='-'? -1 : 1);
        i++;
    }
    while (num[i]) {
        if (num[i]>='0' && num[i]<= '9') {
            if (nFraction==1) {
                result= result * 10 + (num[i]-'0');
            }
            else {
                result= result + ((double)(num[i]-'0') / nFraction);
                nFraction *= 10;
            }
            i++;
        }
        else if (num[i]=='.')
        {
            if (nFraction>1) {
                printf("%s: no\n", num);
                return 0.0;
            }
            nFraction *= 10;
            i++;
        }
        else
        {
            printf("%s: no\n", num);
            return 0.0;
        }
    }
    result *= neg;
    return result;
}

测试输入:

printf("%f\n",parsenum("2..5"));
printf("%f\n",parsenum("-2.5"));
printf("%f\n",parsenum("--2.5"));
printf("%f\n",parsenum("2.5.6"));
printf("%f\n",parsenum("++2.555"));
printf("%f\n",parsenum("255.555"));