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