在C中输入后没有换行符

时间:2010-04-25 21:46:18

标签: c input

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

Type a number
Number: 3x10 = 30

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

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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

在UN * X系统上,查看stty命令(例如stty raw设置无缓冲,stty sane恢复正常,可以通过system调用或execl家庭)。您还可以使用tcsetattr界面中的termios命令。