【发布时间】:2020-08-19 12:28:36
【问题描述】:
#include <stdio.h>
#include <string.h>
int main(void)
{
int n, i, j, k;
char a[10][10];
for (i = 0; i<10; i++)
{
for (j = 0; j<10; j++)
{
scanf(" %c", &a[i][j]);
}
}
for (i = 0; i<10; i++)
{
for (j = 0; j<10; j++)
{
if (strcmp(&a[i][j], "I") == 0)
{
a[i][j] = 'H';
}
}
}
for (i = 0; i<10; i++)
{
for (j = 0; j<10; j++)
{
printf("%c", a[i][j]);
}
printf("\n");
}
return 0;
此代码应该将所有行中的所有“I”更改为“H”,因为它在比较当前字符是否为“I”时遍历数组中的所有字符。 它的示例输入和预期输出将是:
--IHH---I-
-H--------
----------
----H-----
----IH----
----H-----
----H-----
-H--------
---------I
-HI--H---I
--HHH---H-
-H--------
----------
----H-----
----HH----
----H-----
----H-----
-H--------
---------H
-HH--H---H
但真正的输出是;
--IHH---I-
-H--------
----------
----H-----
----IH----
----H-----
----H-----
-H--------
---------I
-HI--H---H
我们可以看到只有第 9x9 个“I”变为“H”。我确实相信问题出在 for 循环中,因为它仅在最后一个循环中完成了这项工作。这意味着 if 语句有效,但迭代存在缺陷。
没有错误消息。
【问题讨论】:
-
不要在不是字符串的东西上使用
strcmp。直接比较字符:a[i][j] == 'H'。strcmp需要一个以 NUL 结尾的字符串。你没有。
标签: c for-loop if-statement char printf