2017-06-17 19 views
1

私は、Cを使用して配列から最大および最小の要素を見つける簡単なプログラムを実装していますが、予期せぬ出力が得られることがあります。 this出力を確認してください。そして、以下のコードをチェックしてください。入力に応じて出力が得られません

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

int largest(int *input) 
{ 
    int i=0,large=0; 
    for(;i<input[i]!='\0';i++) 
    { 
     if(input[i]>large) 
      large=input[i]; 
    } 
    return large; 
} 

int smallest(int *input) 
{ 
    int i=0,small; 
    small=input[i]; 
    for(;i<input[i]!='\0';i++) 
    { 
     if(input[i]<small) 
      small=input[i]; 
    } 
    return small; 
} 

void main() 
{ 
    int *input; 
    int size,i=0,large,small; 
    printf("Enter size of array:\n"); 
    scanf("%d",&size); 
    printf("Enter Numbers:\n"); 
    input=(int *)malloc(size * sizeof(int)); 
    for(;i<size;i++) 
    { 
     scanf("%d",input+i); 
    } 
    large=largest(input); 
    printf("Largest element is:%d, ",large); 
    small=smallest(input); 
    printf("Smallest element is:%d\n",small); 
} 

サイズを関数に渡すと、プログラムが正常に動作しています。上記の機能を実装することにより、

ここで何が起こっているのかわかりません。解決策を見つけるのを手伝ってください。

+1

'私は、[入力を< (int *)malloc(size * sizeof(int)); ' - >' input = calloc(size(size * sizeof(int));} +1、sizeof(int));) – BLUEPIXY

+0

@BLUEPIXYはい、それはcalloc関数を使って完璧に動作しています。ご協力ありがとうございました。しかし、まだ私はmallocを使用している間に動作していない理由を理解できませんでしたか?説明していただけますか? –

+1

あなたは '0'と比較しようとしていますが、入力のデータのどこにも存在しません。 – BLUEPIXY

答えて

0

malloc()によって割り当てられたメモリがzeroに初期化されているとは思わないでください。

ここ
for(;i<input[i]!='\0';i++) 

i<input[i]!='\0'は、あなたの意図が(値0である)配列の末尾を識別することであっても動作しません。その場合は、最後の要素0に初期化し、式をinput[i]!=0に変更する必要があります。あなたが割り当てられたメモリのサイズを追跡し、それがここで配列

0

として扱われていた場合、引数として渡す必要があります

、ソリューションです:

#include<stdio.h> 
    main(){ 
    int count, i, j, k; 
    float all_number[15],temp; 
    printf("\n Enter the number of input : "); 
    scanf("%d",&count); 
    for(i=0;i< count;i++){ 
     printf("\n Enter %d element : ",i); 
     scanf("%f",&all_number[i]); 
    } 
    for(j=0; j<count ; j++){ 
     for(k = j+1; k <count; k++){ 
      if(all_number[j] > all_number[k]){ 
       temp = all_number[j]; 
       all_number[j] = all_number[k]; 
       all_number[k] = temp; 
      } 
     } 
    } 

    printf("\n lowest %d element : %f",i,all_number[0]); 
    printf("\n highest%d element : %f",i,all_number[count]); 
} 
+1

StackOverflowへようこそ。ありがとうございました。ソリューションが何であるかを説明して回答を改善することを検討してください。コード内のコメントはこれを行う簡単な方法です。コードのみの回答はここではあまり評価されていません。あなたは途中で[ツアー]を取るための最初のバッジを楽しむかもしれません。 – Yunnosch

+1

ようこそスタックオーバーフローへ。すぐに[About]と[Answer]ページをお読みください。一般的に、あなたがしていることについて少し説明することは良い考えです。データを並べ替えることは問題ないことは明らかではありません。データをソートして最大値と最小値を決定する必要はありません。 –

+1

@Yunnosch:偉大な心は同じように思えると思います... –

関連する問題