C中的NULL混淆

时间:2015-04-18 06:16:36

标签: c null nullable

我正在创造一个简单的"升序"程序。当我在int数组中找到最小的int时,我想用其他值替换它,这样它就不会再次成为数组中的最小数字。为此,我分配了int NULL。但现在结果并不像预期的那样。

如果我做错了,请告诉我。如果是,那么我应该用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();
}

2 个答案:

答案 0 :(得分:1)

在C语言和相关语言中,int不是&#34;可以为空的&#34; - 您可以使用特殊值,例如一个远远超出输入数据预期范围的值,例如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

}

然而,回到绘图板并查看是否可以提出一个不需要特殊值的更好算法可能是个好主意。

答案 1 :(得分:1)

读取NULL和0以及&#39; \ 0&#39;之间的差异。 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)中您{{1}}遗失的内容是{{1}}。此外,我不建议这样做,因为如果输入的数组中有0,它将无法工作。