2015-04-18 3 views
0

Я создаю простую «восходящую» программу. Когда я нахожу наименьший int в массиве int Я хочу заменить его каким-то другим значением, чтобы он не возвращался в массив как наименьшее число. Для этого я назначил это intNULL. Но теперь результаты не так ожидаются.NULL confusion in C

Скажите, пожалуйста, если я что-то делаю неправильно. Если да, то что я должен заменить значением int?

#include<stdio.h> 
#include<conio.h> 
void main() 
{ 

    clrscr(); 
    int a[10],b,c=0,d=0; 
    printf("Enter number of values you want to enter \n"); 
    scanf("%d",&b); 

    printf("Enter values \n"); 
    for(int i=0;i<b;i++) 
     scanf("%d",&a[i]); 

    while(c<b) 
    { 
     for(int k=0;k<b;k++) 
     { 
     for(int j=0;j<b;j++) 
     { 
      if(a[k] > a[j]) 
      { 
       d=1;  
      } 
     } 
     if(d!=1 && a[k]!=NULL) 
     { 
      c++; 
      printf("%d ",a[k]); 
      a[k]='\0' ; //assigning it as NULL 
     } 
     if(c >= b) 
      break; 
     d=0; 
     } 
    } 
    getch(); 
} 
+0

Вы пытаетесь упорядочить массив в порядке возрастания? – Abhi

+2

'NULL' равно' 0', поэтому вы пытаетесь присвоить ему '0'. –

+0

Да, я пытаюсь напечатать массив в порядке возрастания @Abhi – joker007

ответ

1

В C и родственных языках int s не «обнуляемые» - вы можете использовать специальное значение, вместо этого, например, значение, которое находится далеко за пределами ожидаемого диапазона входных данных, такие как INT_MAX:

#include <limits.h> // required header for INT_MAX et al 

... 

if(d!=1 && a[k]!=INT_MAX) 
{ 
    c++; 
    printf("%d ",a[k]); 
     a[k]=INT_MAX 

} 

Однако это, вероятно, будет хорошая идея, чтобы вернуться к чертежной доске и посмотреть, если вы можете придумать лучше алгоритм, который не требует специальных значений.

+0

Спасибо ... это сработало .. – joker007

1

Прочитать разницу между NULL и 0 и '\ 0' here. Существует несоответствие типа, когда вы пытаетесь использовать a[k]!=NULL.

#include<stdio.h> 
#include<conio.h> 

int main() 
{ 
    clrscr(); 
    int a[10], b, c = 0, d = 0; 
    int k, j, i; 

    printf("Enter number of values you want to enter \n"); 
    scanf("%d",&b); 
    printf("Enter values \n"); 
    for(i = 0;i < b;i++) 
     scanf("%d",&a[i]); 

    while(c < b) 
    { 
      for(k = 0;k < b;k++) 
      { 
        for(j = 0;j < b;j++) 
        { 
          if((a[k] > a[j]) && a[j] != 0) 
          { 
            d=1; 
          } 
        } 
        if(d != 1 && a[k] != 0) 
        { 
          c++; 
          printf("%d ",a[k]); 
          a[k] = 0; //assigning it as NULL 
        } 
        if(c >= b) 
          break; 
        d=0; 
      } 
    } 
    return 0; 
    getch(); 
} 

Этот код устраняет проблему.

Вам не хватает a[j] != 0 в if((a[k] > a[j]) && a[j] != 0). Также я не предлагаю этого, так как он не будет работать, если в массиве введено 0.