#include <stdio.h> main() { int c; while ((c = getchar()) != '\n') switch (c - '2') { case 0: case 1: putchar(c+4); case 2: putchar(c+4); break; case 3: putchar(c+3); default:putchar(c+2); break; } }
时间: 2024-04-28 14:25:21 浏览: 57
该程序的运行结果为:读入一行字符,将每个字符转换为 ASCII 码并减去字符 '2' 的 ASCII 码,然后根据不同的结果执行不同的操作。具体来说:
- 如果结果为0或1,输出字符的 ASCII 码加上4对应的字符;
- 如果结果为2,输出字符的 ASCII 码加上4对应的字符,并跳出 switch 语句;
- 如果结果为3,输出字符的 ASCII 码加上3对应的字符;
- 如果结果不是0、1、2、3中的任意一个,输出字符的 ASCII 码加上2对应的字符。
需要注意的是,每个 case 语句块如果没有 break 语句,则会继续执行下一个 case 语句块或 default 语句块中的代码。因此,在 case 0 和 case 1 中,如果不加上 break 语句,则会继续执行 case 2 和 default 语句块中的代码。
相关问题
#include <stdio.h> main() { int c; while ((c = getchar()) != '\n') switch (c - '2') { case 0: case 1: putchar(c+4); case 2: putchar(c+4); break; case 3: putchar(c+3); default:putchar(c+2); break; } }
该程序存在语法错误,因为第5行的括号没有闭合。如果将第5行修改为如下形式:
```
while ((c = getchar()) != '\n')
```
那么程序的运行结果为:读入一行字符,将每个字符转换为 ASCII 码并减去字符 '2' 的 ASCII 码,然后根据不同的结果执行不同的操作。具体来说:
- 如果结果为0或1,输出字符的 ASCII 码加上4对应的字符;
- 如果结果为2,输出字符的 ASCII 码加上4对应的字符,并跳出 switch 语句;
- 如果结果为3,输出字符的 ASCII 码加上3对应的字符;
- 如果结果不是0、1、2、3中的任意一个,输出字符的 ASCII 码加上2对应的字符。
需要注意的是,每个 case 语句块如果没有 break 语句,则会继续执行下一个 case 语句块或 default 语句块中的代码。因此,在 case 0 和 case 1 中,如果不加上 break 语句,则会继续执行 case 2 和 default 语句块中的代码。
这段代码为什么无法按键控制 #include <stdlib.h> #include <stdio.h> #include <graphics.h> #include <conio.h> HWND hwnd = NULL; //表示主窗口 typedef struct pointxy { int x; int y; } MYPOINT;//坐标属性 struct snake { int num; //蛇的节数 MYPOINT xy[100]; //蛇最多100节 char position; //方向 }snake;//蛇属性 struct food { MYPOINT fdxy; //食物坐标 int eatgrade; //食物分数 int flag; //食物是否存在 }food;//食物属性 enum moveposition{right='D', left = 'A', down = 'S', up = 'W'};//枚举方向 //初始化蛇 void initsnake(); void initsnake() { snake.xy[2].x = 0; snake.xy[2].y = 0; snake.xy[1].x = 10; snake.xy[1].y = 0; snake.xy[0].x = 20; snake.xy[0].y = 0; snake.num = 3; snake.position = right; } //画蛇 void drawsnake(); void drawsnake() { for (int i = 0; i < snake.num; i++) { setlinecolor(BLACK); //矩形边框黑色 setfillcolor(GREEN); fillrectangle(snake.xy[i].x, snake.xy[i].y, snake.xy[i].x + 10, snake.xy[i].y + 10); } } //移动蛇 void movesnake(); void movesnake() { for (int i = snake.num - 1; i > 0; i--) { snake.xy[i].x = snake.xy[i - 1].x; snake.xy[i].y = snake.xy[i - 1].y; } switch (snake.position) { case right: snake.xy[0].x += 10; break; case left: snake.xy[0].x -= 10; break; case down: snake.xy[0].y += 10; break; case up: snake.xy[0].y -= 10; break; default: break; } } //键盘控制 void keydown(); void keydown() { char userkey = 0; userkey = _getch(); switch (userkey) { case right: case'd' : case 77 : if (snake.position != left) snake.position = right; break; case left: case'a' : case 75 : if (snake.position != right) snake.position = left; break; case down: case's' : case 80 : if (snake.position != up) snake.position = down; break; case up: case'w': case 72: if (snake.position != down) snake.position = up; break; default: break; } } //初始化食物 void initfood(); //出现食物 void drawfood(); //吃食物 void eatfood(); //失败判定 void snakedie(); int main() { hwnd = initgraph(640, 480); IMAGE img; loadimage(&img,L"1.jpg", 640, 480); initsnake(); while (1) { cleardevice(); //刷新 putimage(0, 0, &img); drawsnake(); movesnake(); while (_kbhit()) { keydown(); } Sleep(50); } getchar(); //防止闪屏 closegraph(); //关闭图形系统 return 0; }
这段代码无法按键控制是因为在主循环中没有调用键盘控制函数 keydown()。可以在主循环中加入调用 keydown() 的代码,如下所示:
```
while (1)
{
cleardevice(); //刷新
putimage(0, 0, &img);
drawsnake();
movesnake();
keydown(); //调用键盘控制函数
Sleep(50);
}
```
当用户按下键盘时,会调用 keydown() 函数来改变蛇的移动方向。但需要注意的是,在调用 keydown() 函数之前,需要先判断用户是否按下了键盘,可以使用 _kbhit() 函数来实现,如下所示:
```
while (1)
{
cleardevice(); //刷新
putimage(0, 0, &img);
drawsnake();
movesnake();
if (_kbhit()) //判断用户是否按下键盘
{
keydown(); //调用键盘控制函数
}
Sleep(50);
}
```
阅读全文