C / C ++:按ENTER键后,我可以将光标保持在当前行吗?

时间:2013-05-29 12:41:37

标签: c++ c terminal

我想问一下按ENTER后是否有任何方法可以将光标保持在当前行中!

例如......

#include<stdio.h>
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 

我想在用户输入的数字旁边加上“是偶数”(或“是奇数”)

5 个答案:

答案 0 :(得分:3)

用户按下回车键,回显并开始换行。

为了避免这种情况,你需要关闭echo(然后读取并回显除换行符之外的单个字符)。这与系统有关,例如在Linux上,您可以将tty置于原始/未烹饪模式。

您可能会找到一个像GNU readline这样的库来完成大部分工作。

答案 1 :(得分:1)

简单的答案是“你不能”。没有标准的C ++函数来控制这种行为,或者在没有输入到最后输入的情况下读取数据(事实上,直到你按Enter键才真正“输入”数据,所以程序将看不到数据) 。

您可以使用非标准功能,例如其他库,例如“curses”库或系统相关代码,但我们必须生成代码以一次读取一个字符并使用代码将它们合并在一起你写的。

我建议您使用“在输出中重复输入”,并简单地执行以下操作:

printf("%d is", d);
if (d%2)
    printf("an odd number\n");
else
    printf("an even number\n");

答案 2 :(得分:1)

设置原始键盘模式并禁用规范模式。 这几乎就是linux如何管理不在终端显示密码字符。

Termio结构是你应该google的东西。

一个链接是:

http://asm.sourceforge.net/articles/rawkb.html

程序集的常量也可用于系统调用ioctl。

答案 3 :(得分:1)

如果你有一个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;
}

答案 4 :(得分:0)

不是printfscanf ...您是否尝试过使用getc()ungetc(char)

或者,如果我没记错,这是一个退格

,请尝试使用printf("%c", (char)8);

否则,您可能必须使用一些输出库,例如ncurses