C / C ++:按ENTER键后,我可以将光标保持在当前行吗?
我想问一下按ENTER后是否有办法将光标保持在当前行!
例如 …
#include int main() { int d=0; printf("Enter a number : "); scanf("%d",&d); if(d%2)printf(" is a Odd number\n"); else printf(" is a Even number\n"); return 0; }
输出的一个例子:
Enter a number : 10 is a Even number
……但我需要的是这样的:
Enter a number : 10 is a Even number
我想在用户输入的数字旁边加上“是偶数”(或“是奇数”)
简单的答案是“你不能”。 没有标准的C ++函数来控制这种行为,或者在没有输入到最后输入的情况下读取数据(实际上,在你输入之前数据还没有真正“输入”,所以程序将看不到数据) 。
您可以使用非标准function,例如其他库,例如“curses”库或系统相关代码,但是我们必须生成代码以一次读取一个字符并使用您编写的代码将它们合并在一起。
我建议您使用“在输出中重复输入”,并简单地执行以下操作:
printf("%d is", d); if (d%2) printf("an odd number\n"); else printf("an even number\n");
用户正在按Enter键,这将回显并开始一个新行。
为了避免这种情况,您需要关闭回声(然后读取并回显除换行符之外的单个字符)。 这与系统有关,例如在Linux上,您可以将tty置于原始/未烹饪模式。
你可能会找到一个像GNU readline这样的库来完成大部分工作。
设置原始键盘模式并禁用规范模式。 这几乎就是linux如何管理不在终端显示密码字符。
Termio结构是你应该google的东西。
一个链接是:
http://asm.sourceforge.net/articles/rawkb.html
程序集的常量也可用于系统调用ioctl。
如果你有一个vt100风格的终端:光标移动,这个技巧可能会有所帮助。
\033
是ESC, ESC + [ + A
是向上光标, ESC + [ + C
是光标向右
int main() { int d=0; printf("Enter a number : "); fflush(stdout); scanf("%d",&d); printf("\033[A\033[18C%d is a an %s number\n", d, d%2 ? "odd" : "even"); return 0; }
不是用printf
和scanf
…你试过getc()
和ungetc(char)
吗?
或者,尝试使用printf("%c", (char)8);
如果我没记错的那就是退格
否则,你可能不得不使用一些输出库,如ncurses