在C中输入后没有换行符
在C中请求用户输入后,如何防止给定应用创建换行符(’\ n’)? 我喜欢这样的东西:
Type a number Number: 3x10 = 30
在用户输入数字后添加“x10 = 30”。问题是我无法在同一行上执行此操作(我想这样做)。
谁能帮我?
正如KillianDS所说,大多数终端自动缓冲输入,因此您必须告诉终端接口您想要原始/无缓冲输入。 不幸的是,这样做的方式因大多数系统而异。
在UN * X系统上,查看stty
命令(例如stty raw
设置unbuffered和stty sane
以恢复正常,这些可以通过system
或execl
系列调用)。 您还可以使用termios
接口中的tcsetattr
命令。
这在普通C中是不可能的,并且通常甚至不可能。 原因是缓冲,输入流等待一个字符(通常是输入)将数据发送到处理器(如scanf,gets,getchar,…)。 首先,stdin本身是缓冲的。 您可以使用setvbuf : setvbuf ( stdin, NULL, _IONBF, 0)
将其关闭,但我不建议这样做。 这也意味着你必须自己处理退格和其他控制字符,丑陋的东西(如果你想知道这是多么痛苦,请使用telnet一段时间)。
其次,你工作的终端通常也会使用缓冲区,即使你在C中推迟缓冲,这个缓冲区也会缓冲,直到输入命中。 您也可以尝试在此处找到特定于系统的禁用缓冲的方法,但据我所知,这些方法并不适用于每个系统/终端。
如果要在此级别上控制输出,则需要系统特定的API甚至创建自定义控制台。