首页 > 解决方案 > C - 基于变量的 For 循环没有迭代正确的次数

问题描述

在我当前的测试用例中,nCities 在运行时变为 8。我通过 printf 打印来确保这一点。但是,当我使用 i <= nCities 时,循环似乎只迭代一次。如果我使用 i <= 8,它工作正常。为什么是这样?

  int nCities = 0;
  scanf("%d", &nCities);

  if (!nCities == 0)
  {
    printf("Number of cities: %d \n", nCities);

    char tempCity[3];

    for(int i=1; i <= nCities; i++)
    {

      printf("Number of cities: %d \n", nCities);
      scanf( "%s", tempCity );
      printf( "%s", tempCity );

    }

标签: c

解决方案


对于输入“ABC”,代码scanf( "%s", tempCity );将三个字符“ABC”放入tempCity其中并以空字符终止它们。但是,tempCity被定义为只有三个字符,带有char tempCity[3];. 由于 超出了数组的边界,scanf因此 C 标准未定义结果行为。

通过使tempCity足够大以包含它所需的所有数据和/或scanf通过指定最大字段宽度来限制它来解决此问题,例如%3f. (请注意,使用%3f,tempCity应定义为char tempCity[4], 以允许三个字符加上空字符。)


推荐阅读