for循环继续超出限制(C语言)

时间:2016-10-20 13:40:25

标签: c for-loop

我正在尝试创建一个控制台应用程序,它显示乘法表乘以整数。整数由用户确定。 它是用C语言编写的。

我的问题是,如果用户输入小于10或大于20的值,应用程序将继续嵌套的'for'循环超出其确定的限制(num + 10)。 否则它工作正常。

google.charts.load('current', {packages: ['corechart', 'line']});
google.charts.setOnLoadCallback(drawBackgroundColor);

function drawBackgroundColor(transparent) {
  var data = new google.visualization.DataTable();
  data.addColumn('date', 'X');
  data.addColumn('number', 'Xaurum Gold Growth');


  data.addRows([
[new Date(2015 , 03 , 15),0.000125],
[new Date(2015 , 04 , 09),0.000125202590875],
[new Date(2015, 04, 12), 0.000126019393875],

  ]);
var options = {
    hAxis: {
      title: 'Time',
      textStyle:{color: '#FFF'},
      titleTextStyle: {
    color: '#fff'
}
    },
    vAxis: {
      title: 'Value',
      textStyle:{color: '#FFF'},
      titleTextStyle: {
    color: '#fff'
}
    },
    legend: {
    textStyle: {color: '#fff'}
},
NumberFormat: {
  fractionDigits:15,
},
annotations: {
  boxStyle: {
    stroke: '#765e34',
    strokeWidth: 10,
  }
},
    backgroundColor: "transparent",
    colors: ['#876c3c'],


  };

  var chart = new google.visualization.LineChart(document.getElementById('charta_div'));
  chart.draw(data, options);
}

6 个答案:

答案 0 :(得分:2)

您正在arr边界之外写作。检查循环逻辑。

由于您希望将 1 中的数字乘以 10 ,因此您可以更好地使用以下条件:

for (row=0; row < 10; row++) {
    for (col=0; col < 10; col++) {
        arr[row][col] = (row+1)*(col+1);
        printf("%d\t", arr[row][col]);
    }
    printf("\n");
}

答案 1 :(得分:1)

重新排列for循环中的条件将解决问题。

for循环条件总是满足小于10且大于20的输入

答案 2 :(得分:0)

int arr[10][10];的数组范围需要使用0到9之间的索引值。

除了注意嵌套for循环中的数组边界(你当前正在违反)之外,你应该做些什么来验证用户输入之前在for循环中使用它:

printf("Enter a number from 0 to 9: "); // User input of integer.
scanf("%d", &num);
while((num < 0) || (num > 9))// legal array indices are 0 through 9
{
     printf("%d is out of bounds, Enter another number: ", num); 
     scanf("%d", &num);
}
...

答案 3 :(得分:0)

如前所述,您将覆盖数组的边界,这将覆盖堆栈的一部分 - 这可能是存储num值的部分。

使用不同的计数器(i和j用于索引到数组中):

int main()
{
    int row, col, num;          // Initialization of 10 x 10 array.
    int arr[10][10];
    int i = 0;
    int j;

    printf("Enter a number: "); // User input of integer.
    scanf("%d", &num);

    for (row = num; row < num + 10; row++)         /* Nested for loop. Loop starts at determined
                                                   number and stops ten steps further.*/
    {
        j = 0;
        for (col = num; col < num + 10; col++)
        {
            arr[i][j] = row * col;
            printf("%d\t", arr[i][j]);
            j++;
        }
        i++;
        printf("\n");
    }
    return 0;
}

答案 4 :(得分:0)

就像Pablo说的那样,你是在写出arr边界。当arr[col][row]col不在0到9的范围内时row超出范围。也许最简单的解决方法是替换它:

        arr[col][row] = row * col;            
        printf("%d\t", arr[col][row]);

只有这一行:

        printf("%d\t", row * col);

答案 5 :(得分:0)

您需要保持在数组范围内:arr

假设用户输入值50,您的循环将在50和60之间迭代,但您的数组的索引从0到9(总数为10)。因此,您可以抵消索引,减去基数:num

示例 - 数组偏移量:

int rowindex, colindex;
for (row = num; row < num + 10; row++) {
    rowindex = row - num;
    for (col = num; col < num + 10; col++) {
        colindex = col - num;
        arr[colindex][rowindex] = row * col;            
        printf("%d\t", arr[colindex][rowindex]);
    }
    printf("\n");
}