我注意到for循环的计数器(a
变量)效果不佳。
实际上,计数器没有正确递减;我知道这个问题似乎很愚蠢,但我无法理解为什么a
变量会这样做。
#include <stdio.h>
int main() {
int a,i,b,matrice[2][2];
printf("Put inside the matrix some numbers..\n");
for (a=2;a>=0;a--) {
for (b=2;b>=0;b--) {
matrice[a][b]=scanf("%d",&i);
}
}
return 0;
}
答案 0 :(得分:1)
如果你试图将数字读入矩阵,那么这就是你应该做的......
for (a=1;a>=0;a--) {
for (b=1;b>=0;b--) {
scanf("%d",&matrice[a][b]);
}
由于数组matrice[2][2]
包含2*2
个元素,因此有效索引为0
和1
。
这就是for
循环应该从1
而不是2
答案 1 :(得分:1)
当你读入你的数组时,你将超出界限。
for (a=2;a>=0;a--) {
Array只有两个元素,但是你尝试在第一次迭代时读入第三个元素。
matrice[2]
是第三个要素。这两种维度都会发生。
scanf()调用不正确。它将值读入i
,但它返回读取项的数量,而不是i
的值。
答案 2 :(得分:0)
您的矩阵的大小为[2][2]
,但您使用的循环次数为2到0(含)。在大小为2的数组中,最大允许索引为1.
答案 3 :(得分:0)
1)数组索引从0开始,根据您的代码,它将访问matrice[2][2]
,这将导致未定义的行为。
2)matrice[a][b]=scanf("%d",&i);
会将scanf
的返回值存储在matrice[a][b]
中。
#include <stdio.h>
int main() {
int a,b,matrice[2][2];
printf("Put inside the matrix some numbers..\n");
for (a=1;a>=0;a--)
{
for (b=1;b>=0;b--)
{
scanf("%d",&matrice[a][b]);
}
}
//Then print or do other operations on matrice
return 0;
}
答案 4 :(得分:0)
你开始出界了。
对于大小为n
的数组,您从0
迭代到n-1
所以你想要的是
for (a=1;a>=0;a--){
for (b=1;b>=0;b--){
}
}
但是有一个警告的话,用for循环向后跑。你是好的,因为你使用整数,但如果你要做这样的事情
for (auto i = some_vector.size()-1;i>=0;i--){
}
你会遇到很多麻烦,因为some_vector.size()
类型为unsigned
,因此无法取负值,因此循环永远不会退出。除非逻辑另有规定,否则我倾向于总是在循环中递增。
答案 5 :(得分:0)
我想你只是在学习基本的东西..所以试着运行这个稍微版本的代码:
#include <stdio.h>
int main() {
int a,i,b,matrice[2][2];
printf("Put inside the matrix some numbers..\n");
for (a=1;a>=0;a--) {
printf("a->%d\n", a);
for (b=1;b>=0;b--) {
printf(" b->%d\n", b);
scanf("%d",&matrice[a][b]);
}
}
printf("Check:\n");
for (a=1;a>=0;a--) {
for (b=1;b>=0;b--) {
printf(" [%d][%d]:%d\n", a, b, matrice[a][b]);
}
}
return 0;
}
在第一个循环中,修改后的代码运行正确的索引,对于2x2数组,它们是(0,0),(0,1),(1,0)和(1,1)。
请注意,我还使用正确的语法修改了scanf
部分:link。
第二个循环是一个简单的测试,它通过输出矩阵的内容来正确编码数据插入的内容。