在C中获取输入后,如何不跳到新行

wd2eg0qa  于 2023-05-28  发布在  其他
关注(0)|答案(3)|浏览(147)

我试过这个密码

#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.

基本上,我不希望光标在我提供输入后跳过一行。

kupeojn6

kupeojn61#

这不是一个真正的编程问题,而是用户/控制台问题。如果用户在键入内容后按enter,则会向stdin添加一个新的行字符。
根据操作系统的不同,您可以改为输入EOFHow to enter the value of EOF in the terminal。Ctrl+D或Ctrl+Z,具体取决于操作系统。
之后的行为应如下所示:请注意,我还没有触及您的代码。
还有其他非标准的控制台I/O函数,即使在用户按回车键时也可以用来获得所需的行为,但这并不值得研究,因为stdin上的控制台I/O非常过时,而且总体上存在问题。没有使用控制台的GUI的专业程序倾向于通过命令行参数来获取输入,这更不容易出错,也更容易清理。

0h4hbjxa

0h4hbjxa2#

在大多数平台上,当从stdin阅读用户输入时,用户的输入将回显到屏幕上。这包括换行符。
如果您想要更多地控制输入是否回显到屏幕,则必须使用特定于平台的功能。
例如,在Microsoft Windows上,您可以使用_getch函数,该函数将读取用户的单个击键,而不会回显。然后,您可以让程序只在击键满足特定条件(例如,如果它不是换行符)时将该击键打印到屏幕上。为了获得更大的灵活性,可以使用函数ReadConsoleInput代替_getch
在Linux上,您可以使用ncurses library来实现相同的目的。

nwnhqdif

nwnhqdif3#

下面是我上面使用ANSI转义码概述的答案,如果您的终端支持它:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define CSI "\033["
#define FORWARD "C"
#define RESTORE "\0338"
#define SAVE "\0337"
#define str(s) str2(s)
#define str2(s) #s

#define STR_LEN 10 // int(log10(INT_MAX))

int main() {
    char str[STR_LEN+1];
    printf("Enter a number: ");
    printf("%s", SAVE);
    scanf("%" str(STR_LEN) "[^\n]", str);
    printf("%s%zu%s", RESTORE CSI, strlen(str), FORWARD);
    char *p;
    int num = strtol(str, &p, 10);
    printf("You entered: %d. Next, let's print on the same line: ", num);
    printf("This is the output on the same line.\n");
}

这里是预期的输出:

Enter a number: 10You entered: 10. Next, let's print on the same line: This is the output on the same line.

我可能不会用它。例如,如果您输入多行输入,则最终会在屏幕上显示杂散数据。
您应该检查strtol()的返回值,并进一步确保该值符合int(即INT_MININT_MAX之间)。

相关问题