質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

1122閲覧

ある値入力まで入力繰り返しプログラム

KeiD

総合スコア26

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/07/17 19:37

関数double fact(int n)を作成し、main で呼び出し、
入力が負になるまで number=を繰り返すプログラムを作成しようとしています。
以下のプログラムではnを入力すると出力はされますが
負の値がでるまで繰り返しnumber=が表示されません。
どのように変更すればよいかご存じの方ご教示お願い致します。

C言語コード #include<stdio.h> double fact(int n); int main(){ int number; double n; int k; while(1){ printf("number="); scanf("%d",&n); if(n<0) break; k = k + 1.0/fact(n);} printf("e=%f\n",k); } return 0; } double fact(int n){ n=1; int i; for(i=1;i<=n;i++){ n = n*i; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SHOMI

2020/07/17 20:22

main()の{}の数があっていませんし、fact()は途中で途切れています。 実際にコンパイルしたコードを貼ってください。 kは不定値のまま使用されています。
cateye

2020/07/17 22:27 編集

上↑のコード、インデントも付けないで、自分でも見にくくないですか? ・・・ちゃんとインデント付けましょう。 fact()のnって何に使ってます?・・・デバッグしましょう・・・
Daregada

2020/07/17 23:14 編集

おそらく、「本当にやりたいこと」と「書きたいと考えているコード」と「実際に書いているコード」がすべて食い違っています。 「キー入力した値 N から 0 までの 1/n! を加算して、自然対数の底 e の近似値を求める」ということが、「本当にやりたいこと」なのでは?
KeiD

2020/07/17 23:18

こめんとありがとうございます。おっしゃる通りです。すいません。
guest

回答2

0

プログラムを組むならインデントを付ける癖をつけましょう
まずは、そこから始めた方がいいです。

下記のサイトを見て可読性の違いを認識してください。
書いてある言語は違いますが基本的には一緒です
http://wordpress.ideacompo.com/?p=11459

投稿2020/07/17 23:10

AMK

総合スコア765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

現時点で貼られているコードはmain(){}の対応があっていませんし、fact()は途中で途切れています。
コンパイルが通らないので正しいコードを貼りなおしてもらいたいですが、main()で明らかにおかしい点として

  • scanfdoubleを読み取るなら書式文字列は"%lf"です。

もしくは、fact()の引数はintなので整数を読み取りたいという事であれば、ndoubleではなくintにしてください。

  • kが不定値のまま使用されています。

投稿2020/07/17 20:27

編集2020/07/17 20:34
SHOMI

総合スコア4079

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KeiD

2020/07/17 22:04

ありがとうございます。 #include<stdio.h> double fact(int n); int main(){ int n; double k; while(1){ printf("number="); scanf("%lf",&n); if(n<0) break; k = k + 1.0/fact(n);} printf("e=%f\n",k); return 0; } double fact(int n){ n=1; int i; for(i=1;i<=n;i++){ n = n*i; }} でC++で実行しましたが入力数がそのまま出力されてしまいます。
cateye

2020/07/17 22:36 編集

fact()のfor(i=1;i<=n;i++)が1回しか回らないのは分かりますか? また、戻り値がありません。
KeiD

2020/07/17 23:03

ありがとうございます。初心者ですいません。
dodox86

2020/07/17 23:04 編集

それと、SHOMIさんの回答を良く読んでください。nがdouble型ならscanfの書式制御文字列は"%lf"にすべき、との指摘ですが、"%d"のままで使うならnをint型にせよ、ということです。
KeiD

2020/07/17 23:08

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

2020/07/17 23:39

fact()にreturnがありませんし、kは相変わらず初期化しておらず不定値です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問