for (i = 0; i < row; i++) { for (j = 0; j < line; j++) { scanf("%c", &board[i][j]); } getchar(); }应如何修改
时间: 2024-05-06 19:15:44 浏览: 12
这段代码需要修改的地方是在读取输入字符时,由于scanf函数无法读取换行符,因此在读取完每一行后需要使用getchar函数将多余的换行符读取掉。但是由于在输入完最后一行时,也会输入一个换行符,导致程序会多读取一次,因此需要特判最后一行的情况,避免多读取一次。
修改后的代码如下:
```
for (i = 0; i < row; i++) {
for (j = 0; j < line; j++) {
scanf(" %c", &board[i][j]); // 加一个空格可以忽略之前的换行符
}
if (i != row - 1) {
getchar(); // 除了最后一行,都需要读取换行符
}
}
```
其中,scanf函数前加一个空格可以忽略之前的换行符。最后一行不需要使用getchar函数读取多余的换行符,因为程序不会再读取输入了。
相关问题
private int[][][] maps=new int[23][11][11]; public ReadMap() { int index = 0; BufferedReader br = null; for(int i=1;i<=22;i++) { try { BufferedReader in = new BufferedReader(new FileReader("maps/"+i+".map")); String line; //一行数据 int row=0; //逐行读取,并将每个数组放入到数组中 while((line = in.readLine()) != null) { String[] temp = line.split("\\s+"); for(int j=0;j<temp.length;j++) { maps[i][row][j]=Integer.parseInt(temp[j]); } row++; } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public int[][][] getMaps() { return maps; } }
这是一个 Java 类,名为 ReadMap,它用于读取一系列地图文件,将它们转换为三维数组并保存到成员变量 maps 中。其中,maps 是一个三维 int 数组,大小为 [23][11][11],表示一共有 23 个地图,每个地图有 11 行和 11 列。ReadMap 类有一个公共方法 getMaps,用于获取 maps 数组。该方法没有参数,返回一个三维 int 数组。在 ReadMap 类的构造函数中,它使用 BufferedReader 和 FileReader 读取每个地图文件,将每一行数据转换为 int 数组,并放入 maps 数组的对应位置中。如果读取文件时出现异常,它会在控制台上打印出堆栈跟踪信息。
解释下面代码game.map = { startX: 40.5, //棋盘X坐标 startY: 60.5, //棋盘Y坐标 width: game.cellCount * game.cellWidth, height: game.cellCount * game.cellWidth, bubbles: [], init: function () { for (var i = 0; i < game.cellCount; i++) { var row = []; for (var j = 0; j < game.cellCount; j++) { row.push(new Bubble(j, i, null)); } this.bubbles.push(row); } }, clearLine: function (x1, y1, color, isClick) { if (this.isEmpty(x1, y1)) { if (isClick) game.ready.flyin(); return; }; //给定一个坐标,看是否有满足的line可以被消除 //4根线 一 | / \ //横线 var current = this.getBubble(x1, y1); if (!current.color) { console.log(current); } var arr1, arr2, arr3, arr4; arr1 = this.bubbles[y1]; arr2 = []; for (var y = 0; y < game.cellCount; y++) arr2.push(this.getBubble(x1, y)); arr3 = [current]; arr4 = [current]; for (var i = 1; i < game.cellCount ; i++) { if (x1 - i >= 0 && y1 - i >= 0) arr3.unshift(this.getBubble(x1 - i, y1 - i)); if (x1 + i < game.cellCount && y1 + i < game.cellCount) arr3.push(this.getBubble(x1 + i, y1 + i)); if (x1 - i >= 0 && y1 + i < game.cellCount) arr4.push(this.getBubble(x1 - i, y1 + i)); if (x1 + i < game.cellCount && y1 - i >= 0) arr4.unshift(this.getBubble(x1 + i, y1 - i)); } var line1 = getLine(arr1); var line2 = getLine(arr2); var line3 = getLine(arr3); var line4 = getLine(arr4); var line = line1.concat(line2).concat(line3).concat(line4); if (line.length < 5) { if (isClick) game.ready.flyin(); return; } else { var me = this; var i = 0; game.play("clearline", function () { if (i == line.length) { game.score.addScore(line.length); game.stop("clearline"); me.isMoving = false; //game.ready.flyin(); return; } me.isMoving = true; var p = line[i]; me.setBubble(p.x, p.y, null); i++; }, 100); }
这段代码定义了一个游戏地图对象game.map,其中包括了一些属性和方法。其中:
- startX和startY是棋盘的左上角坐标。
- width和height分别是棋盘的宽度和高度,由game.cellCount和game.cellWidth计算得出。
- bubbles是一个二维数组,存储了棋盘上所有的气泡对象。
- init是初始化方法,用于在bubbles中生成所有的气泡对象。
- clearLine是消除气泡的方法,其中参数x1和y1表示要消除的气泡坐标,color表示要消除的气泡颜色,isClick表示是否是用户点击操作。
在clearLine方法中,首先判断给定坐标上是否有气泡,如果没有则直接返回。然后,根据给定坐标上的气泡,计算出四条线(横、竖、斜)上的所有气泡,并通过getLine方法获取可以消除的气泡序列line。如果line长度小于5,则表示无法消除,直接返回。否则,通过play方法依次消除line中的气泡,并根据消除的数量增加分数。