#include <bits/stdc++.h> using namespace std; int n , m , sum; int x , y , z; char ch[20][20]; int dx[8]={1,-1,0,0,1,1,-1,-1}; //八个方向 int dy[8]={0,0,1,-1,-1,1,-1,1}; int main() { cin>>sum; for(int i=0;i<sum;i++) { cin>>n>>m; for(int j=1;j<=n;j++) for(int k=1;k<=m;k++) { cin>>ch[j][k]; } for(int j=1;j<=n;j++) { for(int k=1;k<=m;k++) { int coun=0; if(ch[j][k]=='*') cout<<'*'; //遇到雷直接输出 else { for(int l=0;l<8;l++) //遇到无雷则找八个方向有雷则加一 if(ch[j+dx[l]][k+dy[l]]=='*') coun++; cout<<coun; } } cout<<endl; } if(i!=sum-1) cout<<endl; for(int j=0;j<20;j++) //一轮结束后将字符数组重置 for(int k=0;k<20;k++) ch[j][k]='\0'; } return 0; }将这个c++的代码改为c语言的代码
时间: 2024-01-31 16:03:04 浏览: 76
很好,我来帮你把这段 C++ 代码改成 C 语言代码:
```c
#include <stdio.h>
int n, m, sum;
int x, y, z;
char ch[20][20];
int dx[8] = {1, -1, 0, 0, 1, 1, -1, -1}; //八个方向
int dy[8] = {0, 0, 1, -1, -1, 1, -1, 1};
int main() {
scanf("%d", &sum);
for (int i = 0; i < sum; i++) {
scanf("%d%d", &n, &m);
for (int j = 1; j <= n; j++) {
for (int k = 1; k <= m; k++) {
scanf(" %c", &ch[j][k]);
}
}
for (int j = 1; j <= n; j++) {
for (int k = 1; k <= m; k++) {
int coun = 0;
if (ch[j][k] == '*') {
printf("*");
} else {
for (int l = 0; l < 8; l++) { //遇到无雷则找八个方向有雷则加一
if (ch[j + dx[l]][k + dy[l]] == '*') {
coun++;
}
}
printf("%d", coun);
}
}
printf("\n");
}
if (i != sum - 1) {
printf("\n");
}
for (int j = 0; j < 20; j++) { //一轮结束后将字符数组重置
for (int k = 0; k < 20; k++) {
ch[j][k] = '\0';
}
}
}
return 0;
}
```
改动的主要部分是 `cin` 和 `cout` 改成了 `scanf` 和 `printf`,此外在读取字符数组时需要注意使用 `%c` 格式化符号,并且要在前面加上一个空格,以避免读入多余的换行符。
阅读全文