(原創) while(c = getch()) 为什么可以这样写? (C/C++) (C) (OS) (Linux)
时间: 2023-11-14 11:06:19 浏览: 65
这是因为在C/C++中,赋值运算符(=)的返回值是被赋值的变量。也就是说,赋值运算符将右侧的值赋给左侧的变量,并返回这个变量的值。
在这个例子中,`getch()`函数用于从终端读取一个字符,并将其返回。因此,当我们使用`c = getch()`这样的语句时,`getch()`函数将读取一个字符并将其赋值给变量`c`,同时返回这个字符。由于`c`是一个字符类型的变量,因此可以用于while循环的条件中。如果`getch()`读取到的字符不是EOF(结束符),则while循环将继续执行。
需要注意的是,在某些操作系统和编译器中,`getch()`函数可能会返回不同的值,例如-1表示EOF,因此在使用此函数时需要特别注意。
相关问题
input = getch();
这是一个 C 语言中的函数,用于从键盘获取一个字符并返回。通常用于控制台程序中等待用户输入。函数原型为:
```c
int getch(void);
```
需要注意的是,该函数在 Windows 和 Linux 平台下有不同的实现方式。在 Windows 平台下,需要引入 `<conio.h>` 头文件;在 Linux 平台下,需要引入 `<curses.h>` 头文件,并且需要先初始化 curses 库。
void getxy(HANDLE hout,int*i,int*j)//移动光标到指定位置 { int ch; int m,n;//棋子移动时的坐标 do { ch=0; if (kbhit())//kbhit() 是一个C和C++函数,用于非阻塞地响应键盘输入事件,为 “keyboard hit(键盘敲击)”的简写。 //检查当前是否有键盘输入,若有则返回一个非0值,否则返回0。 { ch=getch();//getch() 接受任意键的输入,不用按回车就返回,返回值是输入值的ascll码 } switch(ch) { case 72: *i-=1; break;//上 case 80: *i+=1; break;//下 case 75: *j-=1; break;//左 case 77: *j+=1; break;//右 } if (*i<0) *i=11+*i; if (*i>10) *i=11-*i; if (*j<0) *j=11+*j; if (*j>10) *j=11-*j; m=*j;n=*i; gotoxy(hout,m*2,n); }while (ch!=13); }
这是一个移动光标到指定位置的函数,使用了键盘输入事件来控制光标的移动,其中:
- HANDLE hout:控制台窗口的句柄。
- int* i, int* j:表示光标当前的位置,通过指针传递,函数内部改变位置的值可以被外部函数获取。
- kbhit():C和C++函数,用于非阻塞地响应键盘输入事件,为 “keyboard hit(键盘敲击)”的简写。检查当前是否有键盘输入,若有则返回一个非0值,否则返回0。
- getch():接受任意键的输入,不用按回车就返回,返回值是输入值的ascll码。
- switch(ch):根据不同的键盘输入事件进行不同的操作,如上下左右移动。
- gotoxy(hout, m*2, n):将光标移动到指定位置,其中m、n为光标的行列坐标,m*2是因为控制台窗口中每个字符占两个位置。直到输入回车键(ch==13)时停止循环。
这段代码可能是用于控制台下的一个棋盘游戏中,用于控制棋子的移动。
阅读全文