printfでの計算結果がおかしくなる問題

このQ&Aのポイント
  • C言語のプログラムで、scanfで入力した3つの整数を掛け算して計算結果を表示するprintf文が、正しい答えを出力しない問題が発生しています。
  • 具体的には、10000×10000×10000の計算結果が-727379968となってしまいます。
  • プログラムは正しくコンパイルされており、ソースコードに問題はないと考えられます。
回答を見る
  • ベストアンサー

printfでの計算結果がおかしくなります。

#include <stdio.h> main() { int first_num, second_num, third_num; /* 入力される3整数 */ int answer; /* 掛け算の答え */ printf("Input Integer Number 1 > "); scanf("%d", &first_num); printf("Input Integer Number 2 > "); scanf("%d", &second_num); printf("Input Integer Number 3 > "); scanf("%d", &third_num); answer = first_num * second_num * third_num; printf("%d * %d * %d= %d\n", first_num, second_num, third_num, answer); exit(0); } というプログラムを作りコンパイルして、いざ実行して 以下の計算をさせると。 10000×10000×10000=-727379968 という計算結果になってしまいます。 なんども確認したのですが、間違っているところはないと思います。

質問者が選んだベストアンサー

  • ベストアンサー
  • okg00
  • ベストアンサー率39% (1322/3338)
回答No.1

計算の過程でanswerの扱える整数の範囲を超えているからです。 ためしに、 #include <stdio.h> #include <limits.h> int main(void) { printf("%d\n", INT_MAX); return (0); } というプログラムを動かしてみてください。これがint型で扱える最大の数です。 回避策は...doubleでも使ってください。 #include <stdio.h> int main(void) { double first_num, second_num, third_num; /* 入力される3整数 */ double answer; /* 掛け算の答え */ printf("Input Integer Number 1 > "); scanf("%lf", &first_num); printf("Input Integer Number 2 > "); scanf("%lf", &second_num); printf("Input Integer Number 3 > "); scanf("%lf", &third_num); answer = first_num * second_num * third_num; printf("%f * %f * %f= %f\n", first_num, second_num, third_num, answer); return (0); }

uruchai
質問者

お礼

ありがとうございます。doubleを使えば無事解決しました!!

その他の回答 (1)

  • S-Fuji
  • ベストアンサー率36% (592/1624)
回答No.2

そんな大きな数値は、intでは表せません。

関連するQ&A

  • c言語の関数について

    .#include<stdio.h> int input_number(void); int main(void) { int num; int total = 0; while(){ num = input_number(); if(num == 0){ break; } total = total + input_number(); } printf("¥n合計値は%dです¥n", total); return 0; } int input_number(void) { int num; printf("数値を入力してください: "); scanf("%d", &num); return num; } 個人でcを勉強しております。 このプログラムで間違っているところを教えていただけませんでしょうか? 苦戦して困っております。できれば勉強法も教えてていただきたいです。 どうか宜しくお願いします。

  • printf scanf が、反応しません。

    #include <stdio.h> /*構造体struct carの宣言*/ struct Car{ int num; double gas; }; int main(void) { struct Car car1; printf("ナンバーを入力してください。\n"); scanf("%d", &car1.num ); printf("ガソリン量を入力してください。\n" ); scanf("%lf, &car1.gas"); printf("車のナンバーは%d:ガソリン量は%fです。\n", car1.num,car1.gas); return 0; } C:\WORK>gcc test18.c C:\WORK>gcc -o test18 test18.c いつも教えて頂き、誠にありがとうございます。 上記の件。 println scanfが反応しません。 どうすればいいでしょうか? ご回答のほど、宜しくお願い申し上げます。

  • printf scanf が、反応しません。

    printf scanf が、反応しません。 #include <stdio.h> int main(void) { int num = 0; int sum = 0; printf("テストの点数を入力してください。(0で終了)\n"); do{ scanf("%d", &num); sum += num; }while(num); printf("テストの合計点は%d点です。\n", sum); return 0; } C:\WORK>gcc test1.c C:\WORK>gcc -o test1 test1.c おかしいです。 打開策を教えてください。 ご多忙中恐れ入ります。 ご回答のほど、宜しくお願い申し上げます。

  • このプログラム見てください

    これで動いたと書いてあるのに動きません。 どこを直せば良いのか教えてください。 #include <stdio.h> int combination(int n,int r){ if ( r==0 ){ return 1; }else if( r==n ){ return 1; }else{ return (combination(n-1,r-1)+combination(n-1,r)); } } int main(){ int num_n=0; int num_r=0; int answer=0; printf("組み合わせの計算をします。数値を入力してください。N=?。\n"); printf("[n]:"); scanf("%d",&num_n); rewind(stdin); printf("[r]:"); scanf("%d",&num_r); rewind(stdin); answer=combination(num_n,num_r); printf("%dC%d=%d\n" , num_n, num_r, answer); return 0; }

  • if-else文および標準演算子(*/+-%)の入力方法

    度々失礼します。 C言語超初心者のものです。QNo.3392139(回答してくださった皆さんありがとうございます。)でも質問させていただきましたが、詳細が足りないようなので、 ここで再度質問をさせていただきます。 プログラミング内容 (1)Enter first integer: 17 [好きな数値選択] (2)Enter operator:(*/+-%) [好きな演算子選択] (3)Enter second integer:5 [好きな数値選択] というように数字・標準演算子・数字の順でキーボードから入力し、 (4)17 / 5 = 3 を(1)~(4)までDOS画面?上に表示させるものです。 そして、if-else文を作成して、以下のようにプログラムを組んでみたのですが(標準演算子は”/”を選択するようにしています)、 else文のところで”parse erro before 'else' ”というエラーが出てしまいます。このエラーがなくなれば、プログラムはうまく起動すると思うのですが・・・。 どこが悪いのでしょうか? まあ、超初心者なので、使える言語はint、float、char、そして関数はscanf、if-else文、位です。 int main() { int num1, num2, num4, num5, num6; char chr; printf("Enter the first integer: "); scanf("%d",&num1); scanf("%c",&num5); printf("Enter an operator (* / + - %): "); scanf("%c",&chr); scanf("%c",&num6); printf("Enter the second integer: "); scanf("%d",&num2); if(chr == '/') num4 = num1 / num2; printf("%d / %d = %d\n", num1, num2, num4); else printf("Can not\n"); system("pause"); return 0; } 大変皆さんお忙しいとは思いますが、出来たらお願いします。 査閲ありがとうございます。

  • for文

    #include <stdio.h> int main(void) { int i; int sum=0; int num, tmp; printf("整数は何個かな:"); scanf("%d",&num); for(i=0; i<num; i++){ printf("No.%d:",i+1); scanf("%d",&tmp); sum+=tmp; } printf("合計値は:%d\n",sum); printf("平均値は:%.2f\n", (double)sum/num); return(0); } 上の文のforの箇所を for(i=1; i<=num; i++){ printf("No.%d:",i); scanf("%d",&tmp); sum+=tmp;   } としても結果的に同じですよね? どっちでもいいかどうか迷ってます。教えて下さい。

  • ”0”入力時、else文の中の”Can not perform by 0”表記を表示させたい。

    度々忙しい中失礼します。 C言語超初心者のものです。else文での表示について質問があります。 プログラミング内容 (1)Enter first integer: 17 [好きな数値選択] (2)Enter operator:(*/+-%) [好きな演算子選択] (3)Enter second integer:5 [好きな数値選択] というように数字・標準演算子・数字の順でキーボードから入力し、 (4)17 / 5 = 3 という回答を求めるものです。また、 (5)17 / 0 ”0”をキーボードから入力した時には”Can not divide by 0”という表記をDOS画面?上に表示させたいと思っているのですが、0を入力した後、enterキーを押すと、DOS画面?がフリーズして、「Send Error Report」または「Don't Send」の別表示が出てきてしまいます。 (3)Enter second integer:0以外の値 時にはプログラミングは正常に作用するので、else文に問題があるのは分かっているのですが、どこに問題があるのかが分かりません(カッコ内はnum2=0でもnum2==0でも不可でした)。もしその問題のありかが分かる方がいらっしゃいましたらアドバイスお願いします。 以下がそのプログラミングです。 int main() { int num1, num2, num4, num5, num6; char chr; printf("Enter the first integer: "); scanf("%d",&num1); scanf("%c",&num5); printf("Enter an operator (* / + - %%): "); scanf("%c",&chr); scanf("%c",&num6); printf("Enter the second integer: "); scanf("%d",&num2); if(chr == '/') {num4 = num1 / num2; printf("%d / %d = %d\n", num1, num2, num4); } else(num2=0) ; {printf("Can not perform (divide) by 0\n");} return 0; } また参考になるURLなどありましたら、それもご紹介願います。 大変皆さんお忙しいとは思いますが、出来たらお願いします。 査閲ありがとうございます。

  • return 1

    #include<stdio.h> int fact(int num); int main(void) { int i; printf("Input figure freely:"); scanf("%d", &i); printf("%d", fact(i)); return 0; } int fact(int num) { if(num>0){ return num * fact(num-1); }else{ return 1; } } -------------------------------------------- 上のプログラムは再帰呼び出しを使った階乗計算の プログラムです。 func()関数内のreturn 1の意味をどなたか教えて いただけないでしょうか?

  • あるプログラムの結果がうまく表示されません

    以下のプログラムを書いたのですが、結果が正確に表示されません。 どこが間違っているのでしょうか? プログラムの内容は10個の整数を入力し、更に入力した数字で割れる個数を表示するものです。 #include <stdio.h> void input_i(int *in, int num); int div_enable(int *in, int num, int divisor); int main(void) { int array[10]; int i, s_num; input_i(array, 10); scanf("%d", &s_num); i = div_enable(array, 10, s_num); printf("%d\n", i); return 0; } void input_i(int *in, int num) { int i; for(i=0; i<num; i++){ scanf("%d", in+1); } } int div_enable(int *in, int num, int divisor) { int cnt, i; cnt = 0; for(i=0; i<num; i++) { if(in[i]%divisor == 0){ cnt++; } } return cnt; }

  • Cプログラミング 

    素数を判定するプログラミングの作成で以下のプログラミングを作成したのですが、すべて 素数でないとでてしまいます。どなたか間違いをおしえていただけませんでしょうか。 #include<stdio.h> int main(void) { int num,i; printf("Please input a number:"); scanf("%d",&num); for (i=2; i < num ; i++){num % i; if (num % i == 0) break; } if (num % i == 0) printf("%d is not prime. \n" ,num); else printf("%d is prime. \n" ,num); return 0; }

専門家に質問してみよう