2016-04-01 15 views
2

私は練習用に作成したこのプログラムがなぜ正しく動作しないのか知りたいです。プログラムは、「配列」と呼ばれる配列に置かれた5つの数字を尋ねます。 2つのVOID関数もあります。一つは数値を取得する関数、cicleとscanf命令には関数を使う関数、もう一つは配列に5つの数値を出力する関数です。問題は、印刷された数字が最初のものにすぎないということです。4.何が問題なのですか? P.P.私の無知のため申し訳ありませんが、私は初心者です。ここでは、4に等しいsizeof(int)プログラムを実行する環境ではこのシンプルなCプログラムで何が問題になりますか?

#include <stdio.h> 
#include <stdlib.h> 

void 
array_print(int array[],size_t size){ 
    int i; 
    for(i=0;i<size;i++){ 
     printf("%i ",array[i]); 
    } 
} 

void 
get_num(int array[],size_t size){ 
    int i; 
    for(i=0;i<size;i++){ 
     scanf("%i",&array[i]); 
    } 
} 

int 
main(){ 
    int array[5]; 
    size_t size; 
    size=sizeof(int); 
    printf("Insert 5 numbers: "); 
    get_num(array,size); 
    array_print(array,size); 

    return 0; 
} 
+0

これを確認できますか?> size = sizeof(int); - > size = sizeof(配列); –

+1

'size = sizeof(array)/ sizeof(* array);' – Lundin

+0

'array'はいくつかの' int'を含んでいます。あなたが 'sizeof(int)'をやっている間に - 例えば一つの 'int'のサイズを取得します。さらに、配列のintまたはsizeのサイズはあなたにとって役に立たない!あなたが必要とするのは、配列内のintの数です。あなたの 'size'を' count'に名前を変更し、Lundin – fukanchik

答えて

6

コードです。

アレイの大きさは考慮sizeofsize_tあるオペレータによって返される値の型を取る

size = sizeof(array)/sizeof(int); 

ように計算することができます。したがって、配列のサイズにこの型を使用する方がよいでしょう。

数字5のマニフェスト定数を導入することもできます。例

#define N 5 

int array[N]; 

またはコンパイラは、可変長配列をサポートしている場合は、

int main(void) 
^^^^^^^^^^^^^^^^ 
{ 
    const size_t N = 5; 
    int array[N]; 

    //... 
+0

からの提案を使用し、そうでなければ '#define size 5'を使用してください(実際にSIZEを使用する必要があります) – FredK

0

あなたがしているれているコンパイラのアーキテクチャを書くことができように配列を宣言するためとして、あなたのコードを実行すると32ビットなので、intのサイズは32ビット= 4バイトです。

size = sizeof(int)size = 4 を返し、次の4つの値を入力するだけでできるようになります。

+0

解決策については@ Lundinのコメントを参照してください。 – mkluwe

関連する問題