2015-05-04 2 views
0

Есть ли способ сделать это ?.Как я могу обходить печать новой строки при использовании 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. 
+0

Невозможно без ncurses. – haccks

+0

вы можете использовать getchar(), если число равно только одной цифре. – scaletos

+0

Необходимо изменить 'stdin', чтобы он не был буферизирован. Это конкретная платформа. Ищите по этому поводу. – chux

ответ

3

Вы не можете сделайте это с помощью scanf. В зависимости от вашей платформы (linux, windows, ...) вы должны использовать библиотеку ncurses или аналогичную.

0

Я принимаю то, что вы видите в своем терминале при запуске приложения, - это stdin, эхо.

Что это значит, так это то, что stdin собирается эхо получить то, что получает stdout.

Как сказано в примере Chux, это зависит от платформы (и зависит от приложения).

Хорошая информация здесь:

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

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.

0

Там не переносимый способ сделать это, так как по умолчанию вход линии буферном и повторил на низком уровне в современных платформах (по крайней мере, Windows и Unix-подобные системы).

Есть способы не использовать линейный буферизованный вход или использовать ручное эхо, но это зависит от платформы.

В Linux, например, вы можете ввести ввод в неканоническом режиме (см. Man termios): это позволит вам считывать данные по одному символу за раз (например) с эхо-выключением, выполнять эхо вручную, не выполнять эхо новой строки, но обработать входной буфер (с sscanf) после новой строки.

Под Windows вы можете использовать функцию getch (объявлено в conio.h), чтобы получить один символ за раз без эха. И я понятия не имею, как это сделать на Mac.

Смежные вопросы