Scanf не считывает пустые строки - C (СИ)
Формулировка задачи:
Уже создавал подобные темы но решения нет.
I Считываю строки с клавиатуры. Всё бы ок. Но scanf не считывает пустые строки (обязательно требует non whitespace символы), также читает до первого whitespace символа. Т.е. слово считаем, а предложение нет. Из-за этого присматриваюсь к fgets/gets. Но с ними какая-то фигня. Они видимо считывают \n из предыдущих printfov как getchar (писал уже). И прога проскакивает считывание, вводя \n. Ставить перед каждым gets fflush(stdin) не хочется ни разу. Почему так чудят эти функции. Как сделать нормальный ввод с клавиатуры строки (считывание до символа \n).
II Пытаюсь разобраться с debug в ms visual studio 2010. Переменные он видит, но вот потоки stdin и stdout я не могу найти. Хотя есть специальная вкладка "потоки" (при дебаге).
III Также с помощью scanf как-то неправильно считываются русские буквы. Подключаю #include <clocale> и в main пишу setlocale(LC_ALL,"Russian"); . Но вместо ююююююю он видит ооооооооо .
Решение задачи: «Scanf не считывает пустые строки»
textual
Листинг программы
#include <stdio.h> #include <string.h> char* RemoveEoln(char* text) { size_t last = strlen(text) - 1; if (text[last] == '\n') { text[last] = 0; } return text; } int main() { char buff[128] = {0}; fgets(buff, sizeof(buff), stdin); printf("[%s]", RemoveEoln(buff)); return 0; }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы
и . - Определяется функция RemoveEoln, которая принимает в качестве аргумента указатель на строку и возвращает указатель на эту же строку, но без завершающего символа новой строки, если он присутствует.
- В функции main создается буферный массив buff определённого размера.
- В этот массив считывается строка с помощью функции fgets.
- В цикле while выводится на экран содержимое массива buff, при этом с помощью функции RemoveEoln удаляется символ новой строки, если он присутствует.
- Завершается выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д