【问题标题】:C multidimensional array , can't see what's wrongC多维数组,看不出什么问题
【发布时间】:2015-03-12 15:24:45
【问题描述】:

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

完成后,打印在(从 1 开始)找到的位置、行和列索引,同时指定元素被找到的次数。

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

另一个问题是,每当我尝试输入大于 [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);
    }
}   

我看不出有什么问题,任何帮助将不胜感激,谢谢。

【问题讨论】:

    标签: c arrays


    【解决方案1】:

    您应该在将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

    【讨论】:

    • 有什么方法可以在程序开始时声明或初始化数组?因为我的老师不喜欢一开始就没有的声明。它仅在我获得 m 和 n 的非零值后声明和初始化时才有效。它也不允许我输入大于 2*2 的数组。谢谢。
    • 我喜欢你的老师!然后你需要两个解决方案之一,这个#define N 100 #define M 100,然后是int tablou[M][N],然后确保n &lt; Nm &lt; M,或者使用malloc()
    【解决方案2】:

    @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)
                ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-01
      • 1970-01-01
      • 2014-01-12
      • 1970-01-01
      相关资源
      最近更新 更多