2017-07-08 22 views
-2

1つ以上のスペースを持つ指定された文字列の数値を乗算したい。文字列の数値を掛ける

例:

I入力52 26 23
は出力が31096する必要があります。

私はこのコードを書いたが、そのは動作していない:問題はあなたのネストされたif文である

#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

この1

#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

1つのスペースで作業する –

+0

ありがとうございます。 –

-1

。最初のif文に入ると、input[i]==32を意味するので、次のif文を入力することはできません。ここでは、input[i]!=32です。

また、わかりやすくするための提案もあります。文字を表す数字を使用する代わりに、文字リテラルを使用してください!

もう1つのことは、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

関連する問題