3

我对 C 完全陌生,现在我正在尝试掌握基础知识,并且在将数据从 scanf 直接读取到数组中时遇到问题。

现在代码如下所示:

int main()
{
    int array[11];
    printf("Write down your ID number!\n");
    scanf("%d", array);
    if (array[0]=1)
    {
        printf("\nThis person is a male.");
    }
    else if (array[0]=2)
    {
        printf("\nThis person is a female.");
    }
    return 0;
}

如您所见,该程序的目的是要求提供一个 ID,并根据第一个数字确定给定的人是男性 (1) 还是女性 (2)。但是似乎我无法让它工作,因为数组没有正确填充(这是在 scanf 之后通过 printf(array) 检查的,这会产生随机数)。像这样运行程序会得到这个人是男性的结果,不管你读的是什么数字。

看起来如此微不足道,我无法弄清楚问题所在。

4

4 回答 4

16

if (array[0]=1)应该是if (array[0]==1)

与 相同else if (array[0]=2)

请注意,赋值表达式返回分配的值,在这种情况下if (array[0]=1)始终为 true,这就是如果您不更改=to将始终执行 if 语句下方的代码的原因==

=是赋值运算符,要比较,不要赋值。所以你需要==.

另一件事,如果你只想要一个整数,为什么要使用数组?你可能还想scanf("%d", &array[0]);

于 2013-04-30T12:19:09.090 回答
6
int main()
{
  int array[11];
  printf("Write down your ID number!\n");
  for(int i=0;i<id_length;i++)
  scanf("%d", &array[i]);
  if (array[0]==1)
  {
    printf("\nThis person is a male.");
  }
  else if (array[0]==2)
  {
    printf("\nThis person is a female.");
  }
  return 0;
}
于 2013-04-30T12:21:40.607 回答
1

转换说明%d符只会转换一个十进制整数。它不知道您正在传递一个数组,它不能基于此修改其行为。转换说明符指定转换。

数组没有说明符,您必须明确说明。这是一个包含四次转换的示例:

if(scanf("%d %d %d %d", &array[0], &array[1], &array[2], &array[3]) == 4)
  printf("got four numbers\n");

请注意,这需要输入数字之间的空格。

如果 id 是单个 11 位数字,最好将其视为字符串:

char id[12];

if(scanf("%11s", id) == 1)
{
  /* inspect the *character* in id[0], compare with '1' or '2' for instance. */
}
于 2013-04-30T12:19:48.977 回答
0

采用

scanf("%d", &array[0]);

==用于比较而不是=

于 2013-04-30T12:20:59.433 回答