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

时间:2015-05-04 17:03:20

标签: c scanf

有没有办法做到这一点?。

让我们以此代码为例:

int num;
printf("enter a number: ");
scanf("%d",&num);
printf("<- this is your number.");

输出将如下:

enter a number: 2
<- this is your number.

我想要的是:

enter a number: 2<-this is your number.

4 个答案:

答案 0 :(得分:3)

您无法使用 scanf 执行此操作。根据您的平台(linux,windows,...),您应该使用库 ncurses 或类似的。

答案 1 :(得分:1)

谢谢你们的帮助。做了一些搜索之后找到了这个:

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.");

输出:enter a number. 2 <- this is your number.

答案 2 :(得分:0)

我正在假设您在终端中看到的内容在运行应用程序时stdin被回显。

这意味着stdin将回复它收到stdout的内容。

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

这里有好消息:

1。Hide password input on terminal 2. echoing of getchar and '\n' char from stdin

答案 3 :(得分:0)

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

有些方法可以不使用行缓冲输入或使用手动回声,但它将取决于平台。

在Linux下,例如,您可以将输入置于非规范模式(请参阅man termios):这将允许您一次读取一个char(例如)的数据,使用echo off,手动执行echo,不回显换行符,但在换行符后处理输入缓冲区(带sscanf)。

在Windows下,您可以使用函数getch(在conio.h中声明)同时获取一个没有回声的字符。我不知道如何在Mac上做到这一点。