C多维数组,看不出有什么问题

时间:2015-03-12 15:24:46

标签: c arrays

程序需要输入行数和列数(m和n),在数组中输入元素,然后指定要找到的元素并找到它。

一旦你这样做,打印在(从1开始)找到的位置,行和列索引,也指定元素被找到的次数。

我的程序出现问题:它会在最终printf之前打印几次错误的数字,显示正确的位置。如果搜索到的位置在开头,则不显示任何内容。我用printf测试了第二个for循环,看到它只显示输入到数组中的最后两个元素。

另一个问题是,当我尝试输入大于[2] [2]的数组时,我会收到错误,例如[3] [3]。

#include <stdio.h>
#include <stdlib.h>

main()
{
    int m=0,n=0,tablou[m][n],i,j,e,nr=0,poz=0;
    printf("Introduceti nr. de linii si nr. de coloane");
    scanf("%d %d",&m,&n);
    printf("Introduceti elementele in tablou\n");

    for(i=0; i<m; i++)
    {
        for(j=0; j<n; j++)
        {
            scanf("%d",&tablou[i][j]);
        }
    }
    printf("Introduceti elementul pe care vreti sa-l gasiti");
    scanf("%d",&e);
    for(i=0; i<m; i++)
    {
        for(j=0; j<n; j++)
        {
            poz++;
            if(tablou[i][j]==e)
            {
                printf("Elementul a fost gasit la pozitia %d fata de elementul 1, pe linia %d si coloana %d",poz,i+1,j+1);
                nr++;
            }
        }
    }
    if(nr>0)
    {
        printf("\nElementul a fost gasit de %d ori",nr);
    }
}   

我看不出有什么不对,感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:3)

在将nm初始化为非零值之后,您应该声明数组,类似这样的

int m, n;

if (scanf("%d%d", &n, &m) != 2)
{
    /* you could write a function that tries to get input again */
    printf("invalid input\n");
    return -1;
}
int tablou[m][n];

也不是main()应该返回int

答案 1 :(得分:1)

@iharob使用C99的新动态数组。编译器为您做了很多事情,这是一个很好的功能。在C的旧电锯版本中,你必须自己做:

int m, n, *tablou;

if (scanf("%d%d", &n, &m) != 2)
{
    printf("invalid input\n");
    return -1;
}
if ((tablou= calloc(n*m, sizeof(int)))==NULL) return -1;
...
for(i=0; i<m; i++)
{
    for(j=0; j<n; j++)
    {
        poz++;
        if(tablou[ i*n + j]==e)
            ...