程序需要输入行数和列数(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);
}
}
我看不出有什么不对,感谢任何帮助,谢谢。
答案 0 :(得分:3)
在将n
和m
初始化为非零值之后,您应该声明数组,类似这样的
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)
...