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 удаляется символ новой строки, если он присутствует.
- Завершается выполнение программы.