Как остановить поток данных - C (СИ)
Формулировка задачи:
Всем привет!
Нужно записать поток данных введенных с клавиатуры в массив.
Получилось так:
Подскажите пожалуйста как остановить поток данных путем нажатия клавиши ENTER?
Нужно реализовать с помощью scanf().
#include <stdio.h>
#define SIZE 255
int main(void)
{
char ch[SIZE];
int x;
printf("Введите фразу: ");
for (x=0; x < SIZE; ++x)
scanf("%c", &ch[x]);
printf("\n");
printf("Вы ввели фразу: ");
for (x=0; x < SIZE; ++x)
printf("%c", ch[x]);
return 0;
}Решение задачи: «Как остановить поток данных»
textual
Листинг программы
#include <stdio.h>
#include <locale.h>
#define SIZE 255
int main()
{
char ch[SIZE];
int x;
setlocale(LC_ALL, "Russian");
printf("Введите фразу: ");
x = 0;
while(x < SIZE-1 && scanf("%c", &ch[x]) && ch[x]!='\n')
{
++x;
}
ch[x] = '\0';
printf("\n");
printf("Вы ввели фразу: ");
for (x=0; ch[x]!='\0'; ++x)
{
printf("%c", ch[x]);
}
getchar();
return 0;
}
Объяснение кода листинга программы
- Подключение необходимых библиотек:
<stdio.h>и<locale.h>. - Определение константы
SIZEравной 255. - Объявление переменных:
chтипаcharиxтипаint. - Установка русской локали с помощью функции
setlocale(). - Вывод сообщения с просьбой ввести фразу.
- Инициализация переменной
xравной 0. - Запуск цикла, который будет выполняться до тех пор, пока:
xменьшеSIZE-1(для избежания выхода за границы массива).scanf()успешно считывает символ (для избежания ошибок ввода).- считанный символ не является символом новой строки ('\n').
- Внутри цикла увеличиваем значение
xна 1. - После выхода из цикла добавляем в конец строки символ конца строки ('\0').
- Вывод сообщения и копирование введенной строки в выходной поток.
- Для вывода каждого символа строки используется цикл, который будет выполняться до тех пор, пока:
ch[x]не равно\0(для избежания выхода за границы массива).
- Внутри цикла выводим текущий символ.
- В конце программы добавлено
getchar(), чтобы программа не закрылась сразу после вывода введенной строки. - Конец программы:
return 0.