6

我想问一下有没有什么办法可以让光标在按回车后保持在当前行!!

例如 ...

#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 

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

4

5 回答 5

3

用户按下回车键,这将被回显并开始新的一行。

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

您可能会找到一个库,例如 GNU readline,它可以为您完成大部分工作。

于 2013-05-29T12:42:53.980 回答
1

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

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

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

printf("%d is", d);
if (d%2)
    printf("an odd number\n");
else
    printf("an even number\n");
于 2013-05-29T12:48:09.933 回答
1

设置原始键盘模式并禁用规范模式。差不多,linux如何设法不在终端中显示密码字符。

Termio 结构是你应该用谷歌搜索的东西。

一个链接是:

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

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

于 2013-05-29T12:53:26.000 回答
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;
}
于 2013-05-29T13:12:02.197 回答
0

不使用printfand scanf...您尝试使用getc()andungetc(char)吗?

printf("%c", (char)8);或者,如果我没记错的话,试着玩一下这是一个退格键

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

于 2013-05-29T12:44:38.223 回答