2
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

}
4

2 回答 2

10

因此,根据您的实际代码

使固定:

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

您需要使用变量的地址

于 2013-09-28T06:32:23.253 回答
0

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

于 2013-09-28T08:15:41.553 回答