我在vs上对两个示例都进行了尝试,都没问题,但是提交代码一个都没通过,跪求大佬帮忙看看:
#include <stdio.h>
#include <string.h>
int main() {
int n, m; scanf("%d %d", &n, &m);
rewind(stdin);/*清除输入缓冲区*/
char Message[101][101]; memset(Message, '#', sizeof(Message));
//生成一个(n+2)*(m+2)的矩阵,外围相当于墙,里面才是具体的信息
for (int i = 1; i <= n; i++) {
char tmp[101];//每行中有多少个字符,要申请m+1个空间,最后一个空间给'\0'
scanf("%s", &tmp);
rewind(stdin);/*清除输入缓冲区*/
int count = 0;//count用来遍历tmp字符串
for (int j = 1; j <= m; j++) {
Message[i][j] = tmp[count];
count++;
}
}
int count = 1;
for (int i = 1; i < n+1; i++) {
for (int j = 1; j < m+1; j++) {
if (Message[i][j] == '*') {
printf("%c", '*');//表明这个地方为地雷
}
else if (Message[i][j] == '#') {
printf("%c", '#');
continue;
}
else if(Message[i][j] == '?') {
int sum = 0;//用来标记这个点附近有多少个地雷
//如果不是地雷,则需要进行判定
if (Message[i - 1][j - 1] == '*') {//左上角
sum++;
}
if (Message[i][j - 1] == '*') {//左边
sum++;
}
if (Message[i - 1][j] == '*') {//上边
sum++;
}
if (Message[i][j + 1] == '*') {//右边
sum++;
}
if (Message[i + 1][j] == '*') {//下边
sum++;
}
if (Message[i + 1][j + 1] == '*') {//右下角
sum++;
}
if (Message[i - 1][j + 1] == '*') {//右上角
sum++;
}
if (Message[i + 1][j - 1] == '*') {//左下角
sum++;
}
printf("%d", sum);
}
}
if (count < n) {
count++;
printf("\n");
}
}
return 0;
}