我正在尝试创建一个控制台应用程序,它显示乘法表乘以整数。整数由用户确定。 它是用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);
}
答案 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");
}