我试过这个密码
#include <stdio.h>
int main() {
int num;
printf("Enter a number: ");
scanf("%d", &num);
printf("You entered: %d. Next, let's print on the same line: ", num);
printf("This is the output on the same line.\n");
return 0;
}
我的输出是这样的:
Enter a number: 10
You entered: 10. Next, let's print on the same line: This is the output on the same line.
但是我想要这样的输出:
Enter a number: 10You entered: 10. Next, let's print on the same line: This is the output on the same line.
基本上,我不希望光标在我提供输入后跳过一行。
3条答案
按热度按时间kupeojn61#
这不是一个真正的编程问题,而是用户/控制台问题。如果用户在键入内容后按enter,则会向
stdin
添加一个新的行字符。根据操作系统的不同,您可以改为输入
EOF
。How to enter the value of EOF in the terminal。Ctrl+D或Ctrl+Z,具体取决于操作系统。之后的行为应如下所示:请注意,我还没有触及您的代码。
还有其他非标准的控制台I/O函数,即使在用户按回车键时也可以用来获得所需的行为,但这并不值得研究,因为
stdin
上的控制台I/O非常过时,而且总体上存在问题。没有使用控制台的GUI的专业程序倾向于通过命令行参数来获取输入,这更不容易出错,也更容易清理。0h4hbjxa2#
在大多数平台上,当从
stdin
阅读用户输入时,用户的输入将回显到屏幕上。这包括换行符。如果您想要更多地控制输入是否回显到屏幕,则必须使用特定于平台的功能。
例如,在Microsoft Windows上,您可以使用
_getch
函数,该函数将读取用户的单个击键,而不会回显。然后,您可以让程序只在击键满足特定条件(例如,如果它不是换行符)时将该击键打印到屏幕上。为了获得更大的灵活性,可以使用函数ReadConsoleInput
代替_getch
。在Linux上,您可以使用ncurses library来实现相同的目的。
nwnhqdif3#
下面是我上面使用ANSI转义码概述的答案,如果您的终端支持它:
这里是预期的输出:
我可能不会用它。例如,如果您输入多行输入,则最终会在屏幕上显示杂散数据。
您应该检查
strtol()
的返回值,并进一步确保该值符合int
(即INT_MIN
和INT_MAX
之间)。