• ベストアンサー

”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などありましたら、それもご紹介願います。 大変皆さんお忙しいとは思いますが、出来たらお願いします。 査閲ありがとうございます。

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

  • ベストアンサー
noname#77845
noname#77845
回答No.2

#1の方の言うとおり、もう少し文法を見直した方がいいでしょう。 でも、やりたいことは判ったので、if文を変更しましょう。 今のまま文法に合わせても、chrが"/"の時は必ず計算してしまいます。 ←ここが重要!! なので、 if(chr == '/'){ if(num2==0){ printf("Can not perform (divide) by 0\n"); }else{ num4 = num1 / num2; printf("%d / %d = %d\n", num1, num2, num4); } } のように、chrが"/"でnum2が"0"の時に「Can not perform (divide) by 0」と表示するように変えてみました。または同時に判定させて if(chr == '/' && num2==0){ printf("Can not perform (divide) by 0\n"); }else{ num4 = num1 / num2; printf("%d / %d = %d\n", num1, num2, num4); } のように変更しましょう。

jpncndgoo2
質問者

お礼

見ず知らずの私に適切なアドバイスありがとうございます。 おかげで自分の考えたとおりにプログラムを組むことが出来ました。

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

とりあえず, 「どのように処理をしていけばいいのか」が理解できていないような気がします. その状態では, いかなる言語を使っても同じように困るでしょう. ちなみに else (num2 = 0); というのは「文法的には」おかしくないです>#1. else のあとに「冗長なかっこを持つ式文」があるだけだから.

jpncndgoo2
質問者

お礼

その通りです。厳しい指摘ありがとうございます。 何か参考になるURL等あれば教えて頂けると幸いです。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

> else(num2=0) ; こんな文法ないから。。。 やろうとしていることを『そのまま』書かないように。if 文は if (条件1) {  <条件1が成立する場合にしたい処理> } else if (条件2) {  <条件1が不成立で条件2が成立する場合にしたい処理> } else {  <条件1も条件2も不成立の場合にしたい処理> } でどうぞ。

jpncndgoo2
質問者

お礼

適切なアドバイスありがとうございます。 本当にありがとうございました。

関連するQ&A

  • 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; } 大変皆さんお忙しいとは思いますが、出来たらお願いします。 査閲ありがとうございます。

  • if~else文の中にまたif~else文をいれるには。

     このプログラムを思うように実行したいのですが、できません。 コンパイルはできるのですが、警告が4つほど出て、結果も自分が思ってるのとは違います。 プログラムのどこを改善すべきか教えてください。 OSはWindows XPで、コンパイラはボーランドのフリーコンパイラを使用しています。 #include<stdio.h> int main(){ int a,b,c,d; printf("1か0を入力してください。\n"); scanf("%d",&a); if(a=0) { printf("2か3を入力してください。\n"); scanf("%d",&b); if(b=2){ printf("今まで合計は%dです。\n",a+b); } if(b=3){ printf("今まで合計は%dです。\n",a+b); } else { printf("指定した数字を入力して下さい。\n"); } } else if(a=1) { printf("あなたは%dを入力しました。\n",a); } else { printf("指定した数字を入力してください。\n"); } return 0; }

  • scanf関数を用いての加減乗除%+-*/入力 

    忙しい中失礼します。 C言語超初心者のものです。加減乗除入力方法について質問があります。 現在、scanf関数を用いて直接の加減乗除%+-*/を入力することにより、9-2=7なり、9*2=18なり、9/2=4なりの回答を出してみたいと思っているのですが、例2の文に変更した後、コンパイルしようとするとエラー(parse error before '2' )が出ます。 どのようにすれば、このエラーはなくなりますか?また、エラーがなくなれば、直接の加減乗除は可能でしょうか? 現在習っているC言語レベル: int、 scanf、 if-else 位です。 プログラム 例1 int main() { int num1, num2; char chr; printf("Enter an operator (* / + - %%): "); scanf("%c",&chr); scanf("%c",&num2); num1 = 9 - 2; printf("%d - %d = %d\n", 9, 2, num1); system("pause"); return 0; }  9-2=7    例2: num1 = 9 'chr’ 2; printf("%d %c %d = %d\n", 9, 'chr', 2, num1); scanfを用いてのキーボードからの”数値”の入力についての回答は沢山見つかるのですが、加減乗除入力についての回答はありませんでした。http://oshiete1.goo.ne.jp/qa1917724.htmlから多分”直接”の加減乗除入力なんてないのだろうな・・・と思いつつもどのページも’ハッキリ’とは書いていないので、質問しました。 そもそもscanf関数では直接の加減乗除入力を受け付けていない?ものなのでしょうか?もしあるのでしたら、その方法も教えて下さい。 どなたか分かる方がいらっしゃいましたら、回答願います。自分の知識の中では曖昧なのでハッキリした回答が欲しいのです。

  • 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 という計算結果になってしまいます。 なんども確認したのですが、間違っているところはないと思います。

  • scanf関数を用いての標準演算子(*/+-%)の入力方法

    C言語超初心者のものです。 scanf関数を用いての標準演算子(*/+-%)の入力方法について質問があります。 例:17 / 5 = 3 において ”17”、 ”/”、 ”5” を各々キーボードから入力し、”3”の数値をDOS画面?上に表示させるものです。 ”17”、”5”はscanf関数を使いキーボードから入力できるのですが、”/”だけがどうしても標準演算子として認識させることが出来ません。 私は以下のプログラムを組んでいるのですが、 char num3;  ・・・(省略) printf("Please type in a operator: "); scanf("%c",&num3);  ・・・(省略) printf("%d %c %d is %d\n", num1, num3, num2, product); 無理やりコンパイルして、DOS画面?上に表示させても17 / 5=65536となってしまいます。 ”/”をプログラミングの中で認識させて、ディスプレイ上で例式が正常に表示されるようにしたいのですが、どうしても回答が3になりません。 多分1つの標準演算子が入力できれば、他の標準演算子も入力できると考えています。 どうすればキーボードから標準演算子をプログラミングに認識させることが可能になるのでしょうか? どなたか分かる方がいらっしゃいましたら教えて下さい。 また参考になるURLなどがあればそれも教えて下さい。 よろしくお願いします。

  • C言語の四則演算プログラムについて

    こんにちは。hayato2192といいます。 今回は、C言語についてのことを質問したいとおもいます。 MSN相談箱の質問の中で数ある四則演算プログラムに対する質問をみたのですが、僕がつくろうとしているプログラムとはまったくちがいました。 プログラムコードは以下です。 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ #include <stdio.h> main() { int d1, d2; char op; printf("START PROGRAM : Arithmetic operation\n"); printf("ENTER THE NUMBER\n"); scanf(" %d", &d1); printf("ENTER THE OPERATOR\n"); scanf(" %c", &op); switch (op) { case '+': printf("ENTER THE NUMBER\n"); scanf(" &d", &d2); printf("ANSWER IS %d\n", d1+d2); break; case '-': printf("ENTER THE NUMBER\n"); scanf(" &d", &d2); printf("ANSWER IS %d\n", d1-d2); break; case '*': printf("ENTER THE NUMBER\n"); scanf(" &d", &d2); printf("ANSWER IS %d\n", d1*d2); break; case '/': printf("ENTER THE NUMBER\n"); scanf(" &d", &d2); printf("ANSWER IS %d\n", d1/d2); break; default: printf("NO ANSWER\n"); break; } return 0; } \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 使っている関数はscanf printf switchだけというとてもシンプルなプログラムなのです。 じっさい、このプログラムをBorlandのコンパイラでコンパイルすると、switch関数がまったく使われずに、演算子(このプログラムでいうOPERATORです)を入力するところで終了してしまいます。 どのように直せばよいのでしょうか。教えてください

  • Cプログラムの条件文  if,else if ,elseについて教えてください。

     こんにちは。課題でどうしても解らないところがあるので教えてください。  次のプログラムは一桁の数(0~9)が偶数(EVEN)か奇数(ODD)かを表示するものです。  #include <stdio.h> main() { int num; printf("please enter a number[0~9]:"); scanf("%d",&num); if (num % 2 ==0) printf("%d is an EVEN. \n", num); else printf("%d is an ODD. \n", num); } というプログラムをコンパイルして実行すると、ちゃんと実行されるのですが、10以上の数や負数を入力しても動作してしまうんです。  そこで0~9の範囲以外の数が入力されていないかを確認して、その場合を偶数、奇数の判断や表示をせず、エラーメッセージだけを表示して終了するプログラムに書き換えなくてはならないのですが、まず  (1)判断する条件式(変数numの内容が0~9の範囲にあるか)で、num >= 0 && num <= 9 をどこに入れればいいか。  (2)please enter a number[0~9]: 8 8 is an EVEN.  (←例えば8を入れると普通こうなるのですが)   please enter a number[0~9]:12   ERROR:12 is in out of range!!  (←0~9以外ののものだったら、この様にエラー表示にしたいのです。  私が考えたプログラムは  #include <stdio.h> main() { int num; printf("please enter a number[0~9]:"); scanf("%d",&num); if (num % 2 ==0) printf("%d is an EVEN. \n", num); if else printf("%d is an ODD. \n", num); else(num >= 0 && num <= 9) printf("ERROR:%d is in out of range!! \n",num); } という風に考えたのですがコンパイルできません。プログラミング初心者なので、書いている内容も解りにくいんですが、どうかよろしくお願いします。

  • またプログラムの修正おねがいします。

    キーボードから出力した3つの整数について、以下の判定を行い 判定結果を出力するプログラムを作成する。 全部同じ 2つ同じ バラバラ * 論理演算子を使わないこと。 * インデントを正しくつけること。 #include<stdio.h> void main(void) { int a,b,c; printf("a --->"); scanf("%d",$a); printf("b --->"); scanf("%d",$b); printf("c --->"); scanf("%d",$c); if(a==b){ if(b==c){ printf("全部同じ\n"); } } else if(a!=b){ if(b==c){ printf("2つ同じ"); } else if(a==c){ printf("2つ同じ"); } else{ printf("バラバラ"); } } } 最近c言語を習ったばっかりなのでわからないとこだらけです。よろしくお願いします。

  • 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; }

  • モジュール分割とユーザ関数

    c言語初心者です。 ユーザー関数を作って、下記のプログラムをどのようにモジュール分割すればいいと思いますか。教えてください。 //n進数の四則演算 #include <stdio.h> void main() { int ch; /* 入力文字ワーク */ int ntype = 0; /* n進数 */ int num1 = 0; /* 数値1 */ int op; /* 演算子 */ int num2 = 0; /* 数値2 */ int ans; /* 演算結果 */ printf("\nInput n(numeral type 2-16)\n"); while ((ch = getchar()) != '\n') { if (ch >= '0' && ch <= '9') { ntype = ntype * 10 + ch - '0'; } else { printf("Numeral type incorrect! 01\n"); return; } } if (ntype < 2 || ntype > 16) { printf("Numeral type incorrect! 02\n"); return; } printf("\nInput numeral1\n"); if ((ch = getchar()) == '\n') { printf("Numeral1 incorrect!\n"); return; } while (ch != '\n') { if (ntype <= 10) { if (ch >= '0' && ch <= '9' - (10 - ntype)) { num1 = num1 * ntype + ch - '0'; } else { printf("Numeral1 incorrect! 03\n"); return; } } else { if (ch >= '0' && ch <= '9') { num1 = num1 * ntype + ch - '0'; } else { if (ch >= 'a' && ch <= 'f' - (16 - ntype)) { num1 = num1 * ntype + ch - 'a' + 10; } else { printf("Numeral1 incorrect 04!\n"); return; } } } ch = getchar(); } printf("\nInput operator\n"); op = getchar(); if (op != '+' && op != '-' && op != '*' && op !='/') { printf("Operator incorrect! 05\n"); return; } if (getchar() != '\n') { printf("Operator incorrect! 06\n"); return; } printf("\nInput numeral2\n"); if ((ch = getchar()) == '\n') { printf("Numeral2 incorrect! 07\n"); return; } while (ch != '\n') { if (ntype <= 10) { if (ch >= '0' && ch <= '9' - (10 - ntype)) { num2 = num2 * ntype + ch - '0'; } else { printf("Numeral2 incorrect! 08\n"); return; } } else { if (ch >= '0' && ch <= '9') { num2 = num2 * ntype + ch - '0'; } else { if (ch >= 'a' && ch <= 'f' - (16 - ntype)) { num2 = num2 * ntype + ch - 'a' + 10; } else { printf("Numeral2 incorrect! 09\n"); return; } } } ch = getchar(); } switch (op) { case '+': ans = num1 + num2; break; case '-': ans = num1 - num2; break; case '*': ans = num1 * num2; break; case '/': if (num2 == 0) { printf("\nCan't divide by 0\n"); return; } ans = num1 / num2; } printf("\nThe answer is %d\n", ans); }

専門家に質問してみよう