2017-02-11 97 views
2

第一次发布,这个代码有问题。 我想让它在超过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"); 
     } 
    } 
} 
+0

使用大括号'('和')'你如果。目前还不清楚条件必须执行的顺序(查找运算符的优先级)。 –

+0

'printf(“yes \ n”)后面没有大括号;' –

回答

0

使用此:中

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

代替

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

+0

@PaulOgilvie我修复了这个问题。 –

+0

我用你的方式,但知道什么时候我输入它只是崩溃! – aran

+0

对不起,'num [i]'是'char','strcmp(3)'需要'char *'。发布前是否测试了解决方案?如果你还没有,请说出来,因为你正在喂错误的解决方案。您必须改用'num + i'或'#num [i]'。 –

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")); 
+0

哦,看起来不错,非常感谢!我修改了原来的代码:if(num [i] =='。'&& num [i + 1] =='。') – aran

相关问题