我正在尝试编写一个游戏"雷区"。我认为最好的方法是使用一个字符矩阵。我询问用户的难度,填充矩阵,然后输出结果,看看是否工作,但它没有,以下代码:
#include <stdio.h>
#include <stdlib.h>
int selectDifficulty(){
int d;
do{
printf("--------Selezionare difficolta' del campo minato--------\n");
printf("1: Principiante (9x9)\n");
printf("2: Intermedio (16x16)\n");
printf("3: Esperto (30x16)\n");
printf(">>>: ");
scanf("%d", &d);
}while(d<1 || d>3);
return d;
}
int main(){
int d,numCols,numRows;
d = selectDifficulty();
//Create numRows x numRows matrix based on difficulty d
if(d==1){
numCols=9;
numRows=9;
}
else if (d==2){
numCols=16;
numRows=16;
}
else{
numCols=30;
numRows=16;
}
char field[numRows][numCols];
for(int i = 0; i < numRows; i++){
for(int j = 0; j < numCols; j++){
field[i][j] = "a";
}
}
for(int i = 0; i < numRows; i++){
for(int j = 0; j < numRows; j++){
printf("%c",field[i][j]);
}
printf("\n");
}
return 0;
}
这是我得到的输出:
ÕÕÕÕÕÕÕÕÕ
ÕÕÕÕÕÕÕÕÕ
ÕÕÕÕÕÕÕÕÕ
ÕÕÕÕÕÕÕÕÕ
ÕÕÕÕÕÕÕÕÕ
ÕÕÕÕÕÕÕÕÕ
ÕÕÕÕÕÕÕÕÕ
ÕÕÕÕÕÕÕÕÕ
ÕÕÕÕÕÕÕÕÕ
我做错了什么?
我尝试使用malloc来创建矩阵,但是得到了相同的输出。
3条答案
按热度按时间kcrjzv8t1#
Ciao,正如已经指出的,您正在使用字符串常量来初始化
char
类型的对象。在本例中,字符串字面值
"a"
隐式转换为指向其第一个char *
类型元素的指针,实际上您必须使用整型字符常量
'a'
来代替字符串也可以代替嵌套的for循环
你可以使用标头
<string.h>
中声明的标准C函数memset
。另外,在输出数组的嵌套for循环中也有一个拼写错误
你必须在内部for循环中使用
numCols
而不是numRows
。要输出二维数组,您可以只使用一个for循环,例如
还有这些if语句
如果引入枚举,则可读性会更强。
zpgglvta2#
正在分配从 * 字符串文本 *(数组)
"a"
转换为field[i][j]
的指针。要存储字符,应执行以下操作:
如果出于某种原因想坚持使用字符串文字量,可以执行以下操作:
或:
一定要打开编译器警告来捕获像这样的简单错误。
ars1skjm3#
关键的错误在于没有使用好的编译器启用所有警告。
......很容易被警告为问题。
通过启用许多警告进行修复。示例:
-pedantic -Wall -Wextra -Wconversion
,含gcc和: