在C中输入后没有换行符

在C中请求用户输入后,如何防止给定应用创建换行符(’\ n’)? 我喜欢这样的东西:

Type a number Number: 3x10 = 30 

在用户输入数字后添加“x10 = 30”。问题是我无法在同一行上执行此操作(我想这样做)。

谁能帮我?

正如KillianDS所说,大多数终端自动缓冲输入,因此您必须告诉终端接口您想要原始/无缓冲输入。 不幸的是,这样做的方式因大多数系统而异。

在UN * X系统上,查看stty命令(例如stty raw设置unbuffered和stty sane以恢复正常,这些可以通过systemexecl系列调用)。 您还可以使用termios接口中的tcsetattr命令。

这在普通C中是不可能的,并且通常甚至不可能。 原因是缓冲,输入流等待一个字符(通常是输入)将数据发送到处理器(如scanf,gets,getchar,…)。 首先,stdin本身是缓冲的。 您可以使用setvbuf : setvbuf ( stdin, NULL, _IONBF, 0)将其关闭,但我不建议这样做。 这也意味着你必须自己处理退格和其他控制字符,丑陋的东西(如果你想知道这是多么痛苦,请使用telnet一段时间)。

其次,你工作的终端通常也会使用缓冲区,即使你在C中推迟缓冲,这个缓冲区也会缓冲,直到输入命中。 您也可以尝试在此处找到特定于系统的禁用缓冲的方法,但据我所知,这些方法并不适用于每个系统/终端。

如果要在此级别上控制输出,则需要系统特定的API甚至创建自定义控制台。