我还在学习C并且可以使用一些帮助。我正在尝试编写一个程序,用于搜索二维char数组。并让它告诉你搜索的char与(x y)坐标中的2D数组相关的点。我的问题是程序没有输出正确的(x y)坐标。 现在我认为该程序应该为B输出(1,0),(1,1),(1,2),(1,3),(1,4)。我还计划调整坐标以便它计数为1而不是0,即B输出应为(2,1),(2,2),(2,3),(2,4),(2,5)。到目前为止,唯一正确打印的坐标是(1,1),我不确定为什么我的代码不起作用。我该怎么做才能解决这个问题?
完整代码:
#define _CRT_SECURE_NO_WARNINGS
#define SIZE 5
#include <stdio.h>
int main()
{
int c, count = 0;
int x[SIZE] = { 0 };
int y[SIZE] = { 0 };
int j, i;
char array[SIZE][SIZE] = { { 0 }, { 0 } };
char array2[SIZE] = { 'A', 'B', 'C', 'D', 'S' };
char search;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
array[i][j] = array2[j];
}
}
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
printf("%c ", array[i][j]);
}
printf(" \n");
}
printf("What letter are you lookiong for? ");
scanf("%c", &search);
for (j = 0; j < 5; j++)
{
for (c = 0; c < 5; c++)
{
if (array[j][c] == search)
{
y[j] = j;
x[c] = c;
count++;
}
}
}
if (count == 0)
printf("%c is not present in array.\n", search);
else
{
for (i = 0; i < count; i++)
{
printf("%c is present at (%d , %d) times in array.\n", search, x[i], y[i]);
}
}
return 0;
}
答案 0 :(得分:2)
改变这个:
y[j] = j;
x[c] = c;
为此:
y[count] = j;
x[count] = c;
数组x
和y
是您的结果,必须根据结果数量编制索引。
答案 1 :(得分:1)
像这样改变你的代码它会正常工作:
试试这个:
int flag = 0;
printf("What letter are you lookiong for? ");
scanf("%c", &search);
for (j = 0; j < 5; j++)
{
for (c = 0; c < 5; c++)
{
if (array[j][c] == search)
{
printf("%c is present at (%d , %d) times in array.\n", search, j, c);
flag = 1;
}
}
}
if (flag == 0)
printf("%c is not present in array.\n", search);
答案 2 :(得分:1)
您的代码声明
y[j] = j;
x[c] = c;
将y []中的j位置处的元素和x []中的c位置更改为j和c。
B出现在0,1和1,1等等。
因此,对于'B'的第一轮循环,当j为0且c变为1时,y [0]处的值将初始化为0且x [1]为1。 (因为搜索在0,1处为TRUE) 再次当循环继续并且j变为1并且c变为1时,y [1]变为1,并且x [1]再次变为1(被覆盖,如在前一循环中,我们做了相同的事情)。
因为对于所有j,0到4,对于'B',c的值将为1。
因此,对于y [0to4]的每个值0,1,2,3,4,我们连接到相同的c [1],即1。
但是当你打印结果时,你正在打印错误的一对结果,你用x [0]打印y [0](很难你从未在x [0]中保存任何值,所有值都保存在x [1]代表'B'),y [1]代表x [1]等。
只有一个结果是正确的,y [1]与x [1]即(1,1)。 对于所有其他值,y [0,2,3,4]将为0,2,3,4但x [0,2,3,4]将为0,0,0,0。
所以,你的逻辑错了,它应该是,
y[count]=j;
x[count]=c;
现在,对于'B',我们保存值j,即y [0]为0,c为x,0为0 [0]。 因此,当我们打印结果时,我们得到正确的位置对,并且对于y [n] = 0,1,2,3,4的每个值,我们有一个保存在x [n] = 1,1,1,1中的值,1