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

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

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

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

Q&A

解決済

3回答

1234閲覧

C言語 プロトタイプ宣言の練習中です(scanfについて)

saruganseki

総合スコア3

C

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

0グッド

0クリップ

投稿2021/12/27 02:36

C言語の勉強中なのですが困っていますコードソースの中ではscanfを2回しか使っていないのに3回入力しないとソースが終了しません
その原因がわかりません。(予想ではint mainの中に書かれている
value = purot_C(arr_1); //ここで1回目
val = purot_B(arr_1,value)//valueと入力しているせいでもう1度、purot_Cのソース内容を読み込んでいる?  結果・2回目3回目)
行っているソース内容はint purot_Cでreturnされた要素数1番目の数値をint purot_Bで拾って新たに標準入力された要素数1番目と比較し大きい数値をreturnするというものです(書き方は見にくいと思いますが多めに見てください)
どなたか自作関数の中に自作関数を入れる仕方を教えてください

コード #include <stdio.h> #define len 3 int purot_B(int Arr_1[],int Arr); int purot_C(int Arr[]); ```int main(){ int arr_1[len]; int val,value; value = purot_C(arr_1); val = purot_B(arr_1,value); printf("%d\n",val); return 0; } int purot_B(int Arr_1[len],int Arr){ int num; int arr[len]; Arr = purot_C(arr); scanf("%d",&num); for(int i=0;i<len;i++){ Arr_1[i]=num % 10; num /= 10; } if(Arr_1[1]>Arr){ return Arr_1[1]; } else{ return Arr; } } int purot_C(int Arr[]){ int num; scanf("%d",&num); for(int i=0;i<len;i++){ Arr[i]=num % 10; num /= 10; } return Arr[1]; }

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

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

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

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

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

guest

回答3

0

ベストアンサー

main
まずvalue = purot_C(arr_1);とあります。purot_C内でscanfが呼び出されます。1回目です。
次にval = purot_B(arr_1,value); とあります。
purot_B内でArr = purot_C(arr); とあります。purot_C内でscanfが呼び出されます。2回目です。

purot_B内でその後続いてscanf("%d",&num); が呼び出されます。3回目です。

Arr = purot_C(arr); が余計です。

投稿2021/12/27 02:46

ozwk

総合スコア13521

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

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

saruganseki

2021/12/27 03:10

ご指摘ありがとうございます 自分の考えとしてはpurot_Cのreturn値を代入させるつもりだったのですがどうしたらpurot_Bの中にpurot_Cのreturn値を代入できるのでしょうか?
ozwk

2021/12/27 03:32 編集

value = purot_C(arr_1); val = purot_B(arr_1,value); ですでに引数経由で渡せています。 にもかかわらずpurot_Bの中で無駄に第2引数を上書きしてしまっています。
guest

0

3回入力しないとソースが終了しません
その原因がわかりません

  1. purot_C には scanf("%d",&num); という入力処理が1つある.
  2. purot_BArr = purot_C(arr); という purot_C の呼び出しと,scanf("%d",&num); という入力処理がある.

上記1.より,purot_C には入力処理が1つあるのだから,purot_B では入力処理が2回行われる.
3. main では purot_Bpurot_C を1回ずつ呼び出している.
上記1.と2.より,両者の入力処理の合計回数は3回となる.

投稿2021/12/27 02:45

fana

総合スコア11656

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

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

fana

2021/12/27 02:47

> C言語の勉強中なのですが 「関数とは何か」というあたりから復習されるのが良いかと.
saruganseki

2021/12/27 03:11

ある程度は知っているつもりでしたが自惚れていました ご指摘ありがとうございます
fana

2021/12/27 03:20

自身で書くコードに関して「処理がどういう順序でどう動いていくのか」が把握できていないようであれば,何かの理解が十分でないわけで,そのまま前に進むのは困難であろうと. 必要な復習をして足元を固めるべき. (「勉強中」に わからない/理解が足りない は普通に起こり得ることなのだから変に構えなくてもよいのでは.)
guest

0

C言語のコードを組むなら、デバッグ環境を揃えましょう
コードの任意の場所で実行を止めて、変数のナカミを見ることができます
また、1行づつ実行させて、動作を確認できます

Windowsなら、VisualStudio入れてみませんか

投稿2021/12/27 02:41

y_waiwai

総合スコア87774

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

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

saruganseki

2021/12/27 03:15

xコードを用いているのですがそちらではちゃんとやれています。 ただコピペしたのものが見やすくなっていなかったのは自分の配慮ミスです すみません
y_waiwai

2021/12/27 03:19

最初から1行づつ実行してみよう。 そうすれば、少なくとも原因がわからない、という言葉は出てこないと思うけど
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問