2017-07-08 116 views
-2

我想乘以給定的字符串中有一個或多個空格的數字。乘以一個字符串的數字

實施例:

如果我輸入52 26 23
輸出應爲31096

我寫這個代碼,但它不工作:

#include <stdio.h> 

int main() 
{ 
    char input[30]; 
    int i, num = 0, v = 1; 
    gets(input); 

    for (i = 0; input[i] != '\0'; i++) 
    { 
     if(input[i] == 32) 
     { 
      v = v * num; 
      if(input[i+1] != 32) 
      { 
       num = 0; 
       continue; 
       } 
      } 
      num = (num * 10) + (input[i] - 48); 
    } 

    printf("%d",v); 
    return 0; 
} 
+0

是學術的目的或者是你可以使用預定義的功能呢? –

+1

你認爲內部if語句塊何時執行?使用調試器或放置'printf'語句並檢查。 – babon

+0

其學術用途 –

回答

0

試試這個

#include <stdio.h> 
#include <string.h> 
int main() 
{ 
    char str[30]; 
    char *token; 
    long int mul = 1; 
    gets(str); 
    token = strtok(str, " "); 
    while (token != NULL) 
    { 
     mul = mul * atoi(token); 
     token = strtok(NULL, " "); 
    } 
    printf("%ld",mul); 
    return 0; 
} 
+0

使用一個空格 –

+0

感謝它的工作。 –

-1

問題就出在你的嵌套的if語句。一旦進入第一條if語句,即表示input[i]==32,因此它永遠不能進入下一條if語句,其中input[i]!=32

我也有一些提高可讀性的建議。不要用數字來表示字符,而要使用字符文字本身!

另一件事,您的input緩衝區中只有30個字符的空間。如果用戶試圖輸入比這更多的數據,你將會發生緩衝區溢出。

最後,如果用戶在數字之間放置多個空格,則輸出將變爲0.這可能是您可能需要或可能不想處理的。

編輯:之前,撥打gets只是抓住字符,直到第一個空格字符。我已經用scanf調用中的格式字符串解決了這個問題。緩衝區溢出問題仍然適用。此外,它不是乘以最後解析的整數,所以我在循環後添加了代碼。另一個說明,這隻適用於非負整數,如果這是你最初不知道的東西。代碼只是假設輸入很好。

編輯2:支持在輸入之前,之間或之後輸入任意數量的空格。

#include <stdio.h> 

int main() { 
    char input[30]; 
    int i, num = 0, v = 1; 

    scanf("%[^\n]s", input); 

    // skip leading spaces 
    for(i = 0; input[i] == ' '; i++); 

    // parse remaining input 
    while(input[i] != '\0') { 
    if(input[i] == ' ') { 
     v *= num; 
     num = 0; 
     // skip subsequent spaces 
     while(input[++i] == ' '); 
     continue; 
    } 

    num *= 10; 
    num += input[i] - '0'; 
    i++; 
    } 

    // ignore trailing spaces 
    if(input[i - 1] != ' ') { 
    // get last parsed integer 
    v *= num; 
    } 

    printf("%i\n", v); 
    return 0; 
} 
+0

您的代碼不會計算給定輸入的預期結果。 – deamentiaemundi

+0

謝謝,作出更改! – kamoroso94

+0

爲什麼downvote? – kamoroso94