C言語の関数について

このQ&Aのポイント
  • C言語の関数についての質問
  • プログラムの修正を求めています
  • 勉強法についてのアドバイスを求めています
回答を見る
  • ベストアンサー

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を勉強しております。 このプログラムで間違っているところを教えていただけませんでしょうか? 苦戦して困っております。できれば勉強法も教えてていただきたいです。 どうか宜しくお願いします。

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

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

間違いはwhile(1)ですね。 それを直せばコンパイルは成功します。 勉強法は、初心者のうちは教科書のプログラムを参考にしつつ、数多くの問題を自力でプログラムして解くことかな。 大学の情報系学科ではスパルタでやらされます。 あとは、エラーは英語表記でも読んで理解すること。 また、配列や動的メモリ確保を行うと「セグメントエラー」を経験します。初心者のみならず上級者にとってもやっかいなエラーです。 ちなみに、total = total + input_number(); は、total += input_number(); のように書けます。

その他の回答 (2)

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.3

>コンパイルしてみたんですがエラーメッセージがよく分からず質問させていただきました なら、そのエラーメッセージをそのまま掲示した方がいいかと。 変に意訳する必要はないです。 で…while(1)にしてコンパイルしたとして…実行すると、 数値を入力してください: 5↓ 数値を入力してください: 0↓ 数値を入力してください: 10↓ 数値を入力してください: 0↓ 数値を入力してください: -1↓ 数値を入力してください: 0↓ 数値を入力してください: 6↓ 数値を入力してください: 0↓ 数値を入力してください: 0↓ 合計値は0です となりますが、期待する結果ですか? # ↓はEnterキー入力 また、なぜそうなるのか判りますか? # ループが何回まわって、input_number()が何回呼ばれているか理解していますか?

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

何を期待して、どこが「間違っている」と思っているのですか? 勉強法「何をやろうとして、それがどのように『うまくいかない』のか説明できるようになりましょう」 間違いと断言できるのは while(){ だけです ただ、これは、コンパイルすればエラーメッセージと共に理由が表示されるはずです。 勉強法「エラーメッセージはちゃんと読み、内容を理解し、その原因を探し、修正しましょう」 それ以外は、「文法的には」間違いはありません おそらく total = total + input_number(); が間違っているような気はしますが、断定できません。 あなたが作っているプログラムが「『1番目に入力した数が0だったら終了、そうでなかったら、2番目に入力した数値を加える』を繰り返す」というプログラムなら「正しい」のです。 あなたが作っているプログラムが「『入力した数が0になるまで、その入力した数値を加える』を繰り返す」というプログラムなら「間違い」のです。

yu924
質問者

補足

教えて頂きありがとうございます コンパイルエラーメッセージを理解出来るよう勉強します また説明不足で申し訳ないです わたしが作りたいのは0を入力すると終了するものです コンパイルしてみたんですがエラーメッセージがよく分からず質問させていただきました またwhil(1){ といれわすれましたすみません

関連するQ&A

  • 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言語で平均をだす

    #include<stdio.h> int main(void) { int num; int sum; printf("テストの点数を入力してください。\n"); do{ scanf("%d",&num); sum+=num; }while(num); printf("テストの合計点は%dです\n",sum); return 0; } テストの平均点をだすプログラムを作りたいのですが、合計を出すまではわかったのですが、ここから、平均を出すようにするにはどうすればよいですか。

  • c言語 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); scanf("%d",&tmp); sum = sum + tmp; } printf("合計値:%d\n",sum); printf("平均値:%.2f\n",(double)sum / num); return(0); } C言語の勉強を始めたばかりのものです。 指定された個数だけ読み込めません 汗 前置と後置をまぜたあたりがよくないのかなと思うのですが。。。 どうしておかしくなるのか教えてください。 内部でどういった処理が行われているのかまだあまりわからない状態です。 ちなみに4と入力した結果は以下です。 整数は何個ですか:4 No.1:4 No.3:3 合計値:7 平均値:1.75

  • scanf関数について

    scanfで数字を入力し「CTRL+D」で入力終了となるプログラムを考えています. 調べてみると以下の様なプログラムでは入力終了となります. #include <stdio.h> int main(void) { int a[256]; int i = 0; while(1) { printf("Input%d = ", i); if ( scanf("%d", &a[i]) == EOF || i > 255) { break; } i++; } return 0; } しかし,次の様にすると「CTRL+D」では終了しません. #include <stdio.h> int main(void) { int a[256]; int i = 0; while(1) { printf("Input%d = ", i);   scanf("%d", &a[i]); <-----追加 if ( a[i] == EOF || i > 255) {   <-----変更 break; } i++; } return 0; } この場合は,環境がUNIXのため「-1」と入力すると終了します. 2種類の違いが分かりません. 教えてもらえないでしょうか?

  • C言語プログラム

    2つの整数を入力させ、それらが等しい場合hitoshii、異なる場合にはhitoshikunaiと出力するプログラムを作りたいのですが、うまくいきません。間違っているところを教えてください。 #include<stdio.h> #include<conio.h> void main() { printf("整数を入力してください:"); int number1; scanf("%d",number1); printf("整数を入力してください:"); int number2; scanf("%d",number2); if(number1==number2) { printf("hitoshii"); } else { printf("hitoshikunai"); } getch(); }

  • C言語

    文を繰り返すときに、『続けますか(Y=続行。N=終了)』と表示して、Yが入力されたら文を繰り返すようにしたいのですが、わからないので教えてください。 #include<stdio.h> int main(void) { int m,s,r,num; char moji; num=1; do{ printf("距離を入力してください。\n"); scanf("%d",&m); printf("平均速度を入力してください。\n"); scanf("%d",&s); r=m/s; printf("所要時間は%dです。\n",r); printf("続けますか?(Y=続行。N=終了)\n");/*このあたりがどうすればいいのかわかりません*/ moji=getchar(); }while(num) printf("終了します。\n"); return 0; }

  • C言語プログラミング

    台形の面積を求めるプログラムを作りたいのですが、最後のmensekiの出力の仕方がわかりません。printf以降のプログラムを教えてください。 #include<stdio.h> #include<conio.h> void main() { int number1,number2,number3,menseki; printf("上底を入力してください:"); scanf("%d",&number1); printf("下底を入力してください:"); scanf("%d",&number2); printf("高さを入力してください:"); scanf("%d",&number3); menseki=(number1+number2)*number3/2; printf( ここがわかりません getch(); }

  • C言語のreturnの使い方

    return a, b; のように2つの引数で値を返せることを最近になり 知りました。ところで以下のような使い方は可能でしょうか? test( , )という2つの引数が必要な関数にnum()で return 1,2としてひとつの関数呼び出しで引数2個分に すると言うようなことです。 #include <stdio.h> int test( int i, int j){   printf("%d %d",i,j); } int num(void){   return 1,2; } int main(void){   test( num() ); }

  • C言語エラー

    C言語をいじっているのですが、16行目と19行目の「型」の前に「;」がありませんと表示されます。 どこをどう改善すればいいか教えてもらえないでしょうか /*遊び半分*/ #include <stdio.h> #include <process.h> int main() { char dear; printf("ああああ\n"); printf("ああああ \n"); scanf_s("%c", &dear); switch (dear){ case 'A04': ; int main(void); { printf("ああああ\n"); int main(void); printf("あああ\n"); printf("あああ\n"); break; system("pause"); return 0; } case 'C34' : printf("\n"); break; case 'E24' : printf("\n"); break; case 'F38' : printf("\n"); break; default: printf("メッセージはありません\n"); break;} return 0;

  • C言語の関数の質問です

    C言語の質問です 最近C言語を始めました。以下の問題がわかりません。 int型の数値を入力して結果をdouble型の戻り値を返すことはできないのか。 関数の値のやり取りでも暗黙の型変換や明示的な型変換はできるのか。 #include <stdio.h> double square(int x); int main(void) { int num;   double ret;   scanf("%d",num); ret = square(num);    printf("%ld",ret); return(0); } double square(int x){ return(x*x); }