Задать вопрос
christi_cat
@christi_cat

Как сделать scanf( ) необязательной для заполнения?

Мне нужно сделать необязательной заполнение определенных параметров.

К примеру
char name[10], surname[10], middle_name[10];
printf("Имя: ");
scanf("%s", &name);
printf("Фамилия: ");
scanf("%*s\n", &surname);
printf("Отчество: ");
scanf("%s\n", &middle_name);

И если человек не хочет заполнять какой то пункт при нажатии на Enter его перекидывало на следующий вопрос. А в данное реализации при нажатии на Enter просо перебрасывает на новую строку, ну вообщем стандартное поведение.
  • Вопрос задан
  • 104 просмотра
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
CityCat4
@CityCat4 Куратор тега C
//COPY01 EXEC PGM=IEBGENER
Ну наверное ... реализовать предложенный Вами алгоритм :) Просто вместо scanf() применять другие функции чтения, gets() например. И считывать, что приехало. Если "\n" или "\0" (мы же правильные программисты, мы же инициализируем области перед использованием :D) - нажимали [Enter].
Если же gets() ведет себя так же - значит на более низкий уровень опускаться...
Ответ написан
Комментировать
@vanyamba-electronics
Примерно так:
#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;
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы