使用scanf时如何绕过打印新行?

使用scanf时如何绕过打印新行?,c,scanf,C,Scanf,有没有办法做到这一点 让我们以这段代码为例: int num; printf("enter a number: "); scanf("%d",&num); printf("<- this is your number."); int-num; printf(“输入一个数字:”); scanf(“%d”和&num); printf(“您不能使用scanf执行此操作。取决于您的平台(linux、windows等),您应该使用库ncurses或类似工具。您不能使用scanf执行此操作。

有没有办法做到这一点

让我们以这段代码为例:

int num;
printf("enter a number: ");
scanf("%d",&num);
printf("<- this is your number.");
int-num;
printf(“输入一个数字:”);
scanf(“%d”和&num);

printf(“您不能使用scanf执行此操作。取决于您的平台(linux、windows等),您应该使用库ncurses或类似工具。

您不能使用scanf执行此操作。取决于您的平台(linux、windows等)您应该使用库ncurses或类似工具。

我假设您在运行应用程序时在终端中看到的是
stdin

这意味着
stdin
将把它接收到的内容回显到
stdout

正如Chux在上面提到的,这是依赖于平台(和终端应用程序)的行为

这里有很好的信息:

一,。
2.

我假设在运行应用程序时,您在终端中看到的是
stdin
被回显

这意味着
stdin
将把它接收到的内容回显到
stdout

正如Chux在上面提到的,这是依赖于平台(和终端应用程序)的行为

这里有很好的信息:

一,。
2.

谢谢大家的帮助。搜索后,请找到以下内容:

int num;
printf("Enter a number: ");
scanf("%d", &num);

CONSOLE_SCREEN_BUFFER_INFO coninfo;
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hConsole, &coninfo);
coninfo.dwCursorPosition.Y -= 1;    
coninfo.dwCursorPosition.X += 20;    
SetConsoleCursorPosition(hConsole, coninfo.dwCursorPosition);

printf("<- this is your number.");
int-num;
printf(“输入一个数字:”);
scanf(“%d”和&num);
控制台\屏幕\缓冲区\信息coninfo;
HANDLE hConsole=GetStdHandle(标准输出句柄);
GetConsoleScreenBufferInfo(hConsole和coninfo);
coninfo.dwCursorPosition.Y-=1;
coninfo.dwCursorPosition.X+=20;
设置控制台位置(hConsole、coninfo.dwCursorPosition);

printf(“谢谢你们的帮助。在进行一些搜索后,找到以下内容:

int num;
printf("Enter a number: ");
scanf("%d", &num);

CONSOLE_SCREEN_BUFFER_INFO coninfo;
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hConsole, &coninfo);
coninfo.dwCursorPosition.Y -= 1;    
coninfo.dwCursorPosition.X += 20;    
SetConsoleCursorPosition(hConsole, coninfo.dwCursorPosition);

printf("<- this is your number.");
int-num;
printf(“输入一个数字:”);
scanf(“%d”和&num);
控制台\屏幕\缓冲区\信息coninfo;
HANDLE hConsole=GetStdHandle(标准输出句柄);
GetConsoleScreenBufferInfo(hConsole和coninfo);
coninfo.dwCursorPosition.Y-=1;
coninfo.dwCursorPosition.X+=20;
设置控制台位置(hConsole、coninfo.dwCursorPosition);

printf(“没有可移植的方法来实现这一点,因为默认情况下,在当前平台(至少是Windows和类似Unix的系统)中,输入是行缓冲的,并在低级别上进行响应

有一些方法不使用线路缓冲输入或使用手动回波,但它将取决于平台

例如,在Linux下,您可以将输入置于非规范模式(参见man termios):这将允许您在echo关闭的情况下一次读取一个字符的数据(例如),手动执行echo,不回显换行符,而是在换行符后处理输入缓冲区(使用
sscanf


在Windows下,您可以使用函数
getch
(在
conio.h
中声明)一次只获取一个字符,而不使用echo。我不知道如何在Mac上实现这一点。

没有可移植的方法来实现,因为在当前平台中,默认情况下输入是行缓冲的,并在低级别上进行回显(至少是Windows和类似Unix的系统)

有一些方法不使用线路缓冲输入或使用手动回波,但它将取决于平台

例如,在Linux下,您可以将输入置于非规范模式(参见man termios):这将允许您在echo关闭的情况下一次读取一个字符的数据(例如),手动执行echo,不回显换行符,而是在换行符后处理输入缓冲区(使用
sscanf


在Windows下,您可以使用函数
getch
(在
conio.h
中声明)在没有echo的情况下一次获取一个字符。我不知道如何在Mac上实现这一点。

没有ncurses是不可能的。您可以使用getchar()如果号码只有一个数字,则需要更改
stdin
以不进行行缓冲。这是特定于平台的。搜索该号码。当您知道用户停止输入号码时,您将必须禁用终端回波(至少)。执行此操作的C代码高度依赖于O/S。没有ncurses是不可能的。如果数字只有一个数字,则可以使用getchar()。需要更改
stdin
以不进行行缓冲。这是特定于平台的。在该平台上搜索。当您知道用户停止输入数字时,您必须禁用终端回波(至少)。执行此操作的C代码高度依赖于O/S。
int num;
printf("Enter a number: ");
scanf("%d", &num);

CONSOLE_SCREEN_BUFFER_INFO coninfo;
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hConsole, &coninfo);
coninfo.dwCursorPosition.Y -= 1;    
coninfo.dwCursorPosition.X += 20;    
SetConsoleCursorPosition(hConsole, coninfo.dwCursorPosition);

printf("<- this is your number.");