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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

1回答

500閲覧

グローバル変数を利用したプログラム

KYUURI

総合スコア46

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2020/06/02 16:41

グローバル変数を利用したプログラム

100まで数を入力させていって100に到達したら終了するプログラム

該当のソースコード

#include <stdio.h> int a; void add(int); int show(void); int main(void) { int x; while(show()<100) { printf("sum:%d\n",show()); scanf("%d",&x); add(x); } return 0; } int add(int a){ int sum = 0; sum = sum + a; return sum; }

試したこと

int add(int a)のとこでエラーが出て実行できません

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

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

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

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

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

kazuma-s

2020/06/02 16:48

何というエラーが出るのですか? 何が悪いのかはエラーメッセージが教えてくれているはずです。 その意味が分からないのなら、それを質問してください。
KYUURI

2020/06/02 16:50

error: conflicting types for 'add 'int add(int a){ と出ました
SHOMI

2020/06/02 17:10

グローバル変数を利用したプログラムとのことですが、グローバル変数を使用していません。 どの部分をグローバル変数にしたいのでしょうか?
KYUURI

2020/06/02 17:11

int aの部分です
SHOMI

2020/06/02 17:16

使用されていないのでそのaをどう使用したいのか説明がないと回答者にはわかりません。 入力された数値の合計を格納して、show()でその値を返したいのだろうと想像はできますが…
KYUURI

2020/06/02 17:19

a を格納してshow()で返したいのですが、どう使ってよいのかわからない状況です…
SHOMI

2020/06/02 17:21 編集

aを格納とは?入力された数値の合計ではなく?
KYUURI

2020/06/02 17:21

aではなく入力された数値の格納です すいません
SHOMI

2020/06/02 17:24

入力された数値をaに格納し、show()で返すのだとすると >100まで数を入力させていって100に到達したら終了するプログラム にはなりませんが… while(show()<100)やprintf("sum:%d\n",show());があるので入力された数値の合計値を格納したいのではないのですか?
KYUURI

2020/06/02 17:26

そうです
SHOMI

2020/06/02 17:30 編集

削除
KYUURI

2020/06/02 17:33

あってます
SHOMI

2020/06/02 17:46

あっているというのは入れ違いになって削除した 1.グローバル変数のaには入力値を格納 2.add()は(前の質問より)sumをstatic intにし、グローバル変数のaをsumに加算 3.show()はadd()内のsumの値を返したい ですか? 3は変数のスコープが異なるのでできません。 add()でsumの値を返したいとのことなので、main()内でそれを保持しておいてください。
KYUURI

2020/06/02 18:10 編集

できました。ありがとうございます。 勉強になります。 前回質問したグローバル変数のaに入力値を格納して加算の方もありがとうございました。
guest

回答1

0

ベストアンサー

プロトタイプ宣言と戻り値の型が違います。

C

1void add(int); 2int add(int a) {

グローバル変数のaが使用されていません。
add()で引数の値をそのまま返しているだけで、関数名から想像される動作を行っていません。
show()の関数定義がありません。


追記・修正の内容からするとこういうことですかね?

diff

1#include <stdio.h> 2 3-int a; 4+int a = 0; // 入力された数値の合計値 5void add(int); 6int show(void); 7 8int main(void) 9{ 10 int x; 11 12 while (show() < 100) 13 { 14 printf("sum:%d\n", show()); 15 scanf("%d", &x); 16 add(x); 17 } 18 return 0; 19} 20 21-int add(int a) { 22+void add(int x) { 23- int sum = 0; 24 a = a + x; 25- return sum; 26} 27 28+int show(void) { 29+ return a; 30+}

前回質問の修正をベースに、グローバル変数のaに入力値を格納して加算の場合

diff

1#include <stdio.h> 2 3int a; 4-void add(int); 5+int add(); 6-int show(void); 7 8int main(void) 9{ 10- int x; 11+ int sum = 0; 12 13- while (show() < 100) 14+ while (sum < 100) 15 { 16- printf("sum:%d\n", show()); 17+ printf("sum:%d\n", sum); 18- scanf("%d", &x); 19+ scanf("%d", &a); 20- add(x); 21+ sum = add(); 22 } 23 return 0; 24} 25 26-int add(int a) { 27+int add() { 28- int sum = 0; 29+ static int sum = 0; // 前回質問の修正 30 sum = sum + a; 31 return sum; 32}

投稿2020/06/02 16:44

編集2020/06/02 17:57
SHOMI

総合スコア4079

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

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

KYUURI

2020/06/02 16:52

int add(int a)をvoid add(int a)にすればよろしいでしょうか そうした場合return sum;でエラーが出てしまいました…
SHOMI

2020/06/02 16:56

main()ではadd()の戻り値を受け取ろうとしていませんが、sumの値を返したいのか不要なのかどちらなのでしょう?
KYUURI

2020/06/02 17:02

sumの値を返したいです
SHOMI

2020/06/02 17:05

であれば int add(int); になるのは自明でしょう?
SHOMI

2020/06/02 17:11 編集

(削除)質問への追記・修正へ移動しました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問