2014-10-26 77 views
-5

我注意到for循环的计数器(a变量)不能正常工作。 事实上,计数器不会正确递减;我知道这个问题似乎很愚蠢,但我不明白为什么a变量会这样做。for循环内的一个计数器的怪异行为

#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; 
} 
+1

告诉我最内层行将会运行多少次以及矩阵有多少个元素。 – chris 2014-10-26 18:31:19

+0

更改为'for(a = 1; a> = 0; a--){'。你开始走出界限。 – 2014-10-26 18:31:40

+0

'for(a = 2; a> = 0; a - )'不是唯一的问题。对于for(b = 2; b> = 0; b - )'类似。还有'matrice [a] [b] = scanf(“%d”,&i);'有语法问题..看我的回答! – gmas80 2014-10-26 18:51:32

回答

0

1)0的数组索引开始,按您的代码它将访问matrice[2][2],这将导致未定义的行为

2)matrice[a][b]=scanf("%d",&i);将在matrice[a][b]中存储返回值scanf


#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; 
} 
+0

非常感谢你!!的确,我在想这个问题可能是一个疏忽 – Luca 2014-10-26 18:58:39

+0

@卢卡:不客气:) – user1336087 2014-10-26 19:02:58

1

,如果你想读的数字到矩阵,那么这就是你应该做的..

for (a=1;a>=0;a--) { 
    for (b=1;b>=0;b--) { 
     scanf("%d",&matrice[a][b]); 
    } 

由于阵列matrice[2][2]2*2元素是什么,有效的指数01
这就是为什么for循环应该从1开始,而不是2

1

你要出界,当你阅读到您的数组。

for (a=2;a>=0;a--) { 

数组只有两个元素,但您尝试在第一次迭代中读入第三个元素。

matrice[2] 

是第三个元素。这发生在两个维度上。


scanf()的调用是不正确的。它将值读入i,但它返回读取项目的数量,而不是i的值。

0

您的矩阵的大小为[2][2],但您正在使用从2运行到0(含)的循环。大小为2的数组的最大允许索引为1

0

你开始了界外。

对于大小的数组n您遍历从0n-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型所以循环永远不会退出。除非逻辑规定,否则我总是会因为这个原因而循环增加。

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

第二个循环是一个简单的测试,即通过输出矩阵的内容正确编码数据插入的内容。