Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C/C++;:按ENTER键后是否可以将光标保留在当前行中?_C++_C_Terminal - Fatal编程技术网

C++ C/C++;:按ENTER键后是否可以将光标保留在当前行中?

C++ C/C++;:按ENTER键后是否可以将光标保留在当前行中?,c++,c,terminal,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键后,是否有办法将光标保持在当前行中

例如

#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键,这将被回显并开始新的一行

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


您可能会发现像GNU readline这样的库为您完成了大部分工作。

不使用
printf
scanf
。。。您是否尝试过使用
getc()
ungetc(char)

或者,尝试使用
printf(“%c”,(char)8)如果我没记错,那是退格

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

简单的答案是“您不能”。没有标准的C++函数来控制这种行为,或者在不结束输入的情况下读取数据(事实上,数据直到进入了输入才真正被输入),所以程序将看不到数据。p> 您可以使用非标准功能,例如附加库,例如“curses”库或依赖于系统的代码,但是我们必须生成代码来一次读取一个字符,并使用您编写的代码将其合并在一起

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

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

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

Termio结构是你应该在谷歌上搜索的东西

其中一个环节是:


程序集的常量也可用于系统调用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;
}

把你的<代码> TTY 在原始模式下。<代码> man NcRISS < /Cord>。准备好了很多代码。删除了代码> C++ +代码>标签。这是代码> C <代码>。@ BobtFix:不要这样做。如果他使用C++编译器,那么这是C++。@ BBTFISH,它对C++程序员也有帮助,我正在与G+编译器……-1,答案的前半部分CA。不行,你不能退格“撤消”回车和换行。我用gechar()试过,但不起作用……就像“@Mats peterson”和“@Ben Voigt”所说的,没有任何标准函数可以做到这一点……很抱歉我误导了你……我记得我写过(char)8以在mode3;int10h模式下清除屏幕,但可能不适用于此处。由于我们使用的是奇怪的东西,如果您的平台支持,请使用conio.h的kbhit()(非标准)
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;
}