2015-12-16 3 views
1

Я должен принимать пользовательский ввод и записать его в файл, для которого я использую fgets() с идеей, чтобы предотвратить переполнение:вход пользователя и fgets

while (fgets(line, sizeof line, stdin) != NULL) 
    fputs(line, file); 

Проблема с этим состоит в том, что пользователь имеет для ввода CTRL + Z на пустой строке, а затем отправьте его, чтобы выйти из ввода, и это может показаться немного запутанным. Есть ли более простой способ выхода из ввода fgets()?

Как насчет других методов? Если я прочитаю символ по символу, я могу реализовать символ выхода, но пользователь не может удалить вход, и это тоже запутывает, поэтому мне нужно реализовать алгоритм удаления, который добавляет слишком много сложности для кода.

Редактировать: Пользователь должен иметь возможность вводить код C в терминале с минимальными ограничениями.

+0

Работает как символ на Linux. Может быть, у вас есть какая-то странная среда разработки или ОС? И 'fgets' не позволяет редактировать. 'stdin' - поток символов! – Olaf

+0

Идея состоит в том, чтобы иметь возможность очень легко выйти из ввода (возможно, конкретный символ выхода), и я не могу сделать это с помощью fgets. – user3604097

ответ

2

Почему бы не использовать входное значение для реализации проверки? Таким образом, вам не понадобится реализация , чтобы отметить конец ввода.

Разрабатывать, в случае, если вы хотите использовать пустую строку, чтобы отметить конец ввода, вы можете проверить на первый элемент входного буфера равных новую строку для выполнения условия break, как

while (fgets(line, sizeof line, stdin) != NULL) 
    { 
      if (line[0] == '\n') 
      { 
        printf("end\n"); 
        break; 
      } 
       fputs(line, file); 
    } 

Редактировать: Если вы хотите реализовать свой собственный маркер конца ввода, вы можете использовать этот конкретный маркер для сравнения с первым элементом (или, если это многобуквенный маркер, возможно, strcmp() с вводом) для реализации break.

+0

Это не позволяет пустую строку, и пользователь может захотеть иметь пустую строку. – user3604097

+0

@ user3604097 Я не заметил, что это часть вашего требования. –

+0

Я забыл упомянуть об этом, но общая идея заключается в том, чтобы пользователь мог ввести код C в окне терминала. – user3604097

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