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

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

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

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

Q&A

2回答

2394閲覧

サブプログラムの使い方がわかりません

audereestfacere

総合スコア6

C

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

0グッド

0クリップ

投稿2018/06/02 03:08

前提・実現したいこと

サブプログラムをメインプロブラムに組み込むと変な結果が出てしまいます。
intやvoid,returnなどをまだしっかり理解できていないのが原因とは思いますが、この短いプログラムの何がおかしいのかも分からない状態です。
まだプログラムを習い始めて1週間ほどのため、初歩的な内容だとは思いますが、問題点を教えていただけないでしょうか

発生している問題・エラーメッセージ

エラーメッセージ 実行結果 Before sorting:4195424 0-94448987232765 0 0 0 0 0 ### 該当のソースコード C言語 #include <stdio.h> int PrintArray(int i) {  int a[i]; for(i=0;i<10;i++)printf("%3d",a[i]); printf("\n"); } int main(void) { int a[10] = {1,5,8,9,3,4,10,6,7,2}; int i; printf("Before sorting:"); PrintArray(10); return(0); }

試したこと

intやvoidをかえてみたり、サブプロラムにreturnをつけてみたりしたが、うまくいきませんでした。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

こんにちは、
配列a[MAX_NUMBER] = {1,5,8,9,3,4,10,6,7,2};を関数PrintArrayで宣言する方法があります。(要素数10を記号定数MAX_NUMBERにしました。)

また、エラーになる原因の一つとして、ソースコードのint PrintArrayのところに全角の空白がありました。

C

1include <stdio.h> 2 3#define MAX_NUMBER 10 4 5void PrintArray(int); 6 7int main(void) 8{ 9 10 printf("Before sorting:"); 11 12 PrintArray(MAX_NUMBER); 13 return 0; 14} 15 16void PrintArray(int i) 17{ 18 19 int a[MAX_NUMBER] = {1,5,8,9,3,4,10,6,7,2}; 20 21 for(i = 0;i < MAX_NUMBER; i++){ 22 printf("%3d",a[i]); 23 } 24 printf("\n"); 25 26}

投稿2018/06/02 05:03

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

audereestfacere

2018/06/02 12:56

回答ありがとうございます。 最初にdefineで定義する方法があるんですね。 知りませんでした。 これで一つ知識がつきました。 ありがとうございました。 回答していただいたコードも参考にさせていただきます。
guest

0

関数PrintArray内で宣言した変数aは、main関数内のそれとは別物です。
名前が同じだからと言って、同じメモリを参照してくれるわけではありません。

グローバル変数として宣言するか、引数として引き渡しましょう。
後者だとこんな感じです。

C

1void PrintArray(int a[], int size) 2{ 3 for(int i = 0; i < size; i++) { 4 printf("%3d", a[i]); 5 } 6 printf("\n"); 7} 8 9int main(void) { 10 ... 11 12 PrintArray(a, 10); 13 14 ... 15}

第二引数の取り扱い方もおかしかったので、その部分も変更しています。

投稿2018/06/02 03:19

編集2018/06/02 03:21
LouiS0616

総合スコア35660

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

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

audereestfacere

2018/06/02 12:45

回答ありがとうございます。 どんな関数内でも同じものとして扱えると思っていました。 回答していただいたことをもとに直したらうまくいきました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問