Как сделать scanf( ) необязательной для заполнения?
Ну наверное ... реализовать предложенный Вами алгоритм :) Просто вместо scanf() применять другие функции чтения, gets() например. И считывать, что приехало. Если "\n" или "\0" (мы же правильные программисты, мы же инициализируем области перед использованием :D) - нажимали [Enter]. 
Если же gets() ведет себя так же - значит на более низкий уровень опускаться...
Примерно так:#include <iostream>
#include <ncurses.h>

using namespace std;

string get_string()
{
	string result;
	while(true) {
		int c = getch();
		if (c == -1)
			continue;
		if (c == 10)
			break;
		if (c == 127) {
			if (result.length() > 0) {
				result = result.substr(0, result.length() - 1);
				clear();
				addstr("Enter name: ");
				addstr(result.c_str());
			}
		}
		else if (c > 33 && c < 127) {
			result += (char) c;
			addch(c);
		}
	}
	return result;
}

int main() {
	initscr();
	noecho();
	addstr("Enter name: ");
	string name = get_string();
	endwin();
	cout << endl << name << endl;
	return 0;
}