C 将输入带入int数组时发出警告

C 将输入带入int数组时发出警告,c,C,编辑 : #包括 #包括 void main() { int数组[100],n,j,ctr=0,flag=0; #定义FIX(i)((数组[i]==i)?1:0) #定义检查(i,num)((数组[i]==num)和&(数组[num]==i)?1:0) scanf(“%d”,n); printf(“\n”); 对于(j=0;j=n) { printf(“超出范围\n”); 返回; } 其他的 { 如果(FIX(j)=1) ctr++; else如果((数组[j]

编辑

:

#包括
#包括
void main()
{
int数组[100],n,j,ctr=0,flag=0;
#定义FIX(i)((数组[i]==i)?1:0)
#定义检查(i,num)((数组[i]==num)和&(数组[num]==i)?1:0)
scanf(“%d”,n);
printf(“\n”);
对于(j=0;j=n)
{
printf(“超出范围\n”);
返回;
}
其他的
{
如果(FIX(j)=1)
ctr++;
else如果((数组[j]
因此,基于您的:

修正:


您需要使用变量的地址来获取任何变量的输入,您必须使用“&”运算符来获取分配给该内存地址的输入。因此,在您的程序中,您应该将scanf(“%d”,n)更改为scanf(“%d”,n)。这意味着您正在将整型数据分配给整型内存地址

我没有收到这样的警告。这个警告不是你正在编译的。然而,这将来自
scanf(“%d”,数组[i])您确定您在此处编写的代码正确吗?你能把它分成几行以提高可读性吗?这是我的实际代码这是你的实际代码吗?顶部没有任何包含项。
int array[100], i;

for(i = 0; i < 100; i++)
{
  scanf("%d", &array[i]);
}
warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘int’ [-Wformat] 
#include<stdio.h>
#include<stdlib.h>
void main()
{
  int array[100], n, j, ctr = 0, flag = 0;
#define FIX(i) ((array[i]==i)?1:0)
#define CHECK(i,num) ((array[i]==num)&&(array[num]==i)?1:0)
  scanf("%d", n);
  printf("\n");
  for (j = 0; j < n; j++)
  {
    scanf("%d", &array[j]);
    if (array[j] >= n)
    {
      printf("out of range\n");
      return;
    }
    else
    {
      if (FIX(j) == 1)
        ctr++;
      else if ((array[j] < j) && ((CHECK(j,array[j])) == 1) && (flag == 0))
      {
        ctr = ctr + 2;
        flag = 1;
      }
    } //end if
  } //end loop

}
scanf("%d",&n);
           ^ Use ampersand sign