2017-02-11 95 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

相關問題