Как сделать, чтобы Enter был концом ввода? - C (СИ)
Формулировка задачи:
printf("Vvedit chysla\n");
do{
scanf("%d",arr+i);
i++;
}while (arr[i]!='\n');
size=i;Решение задачи: «Как сделать, чтобы Enter был концом ввода?»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int isDigit(const char *);
int main(void)
{
int index = 0, i, arr[10], state;
char p[20];
printf("Vvedit chysla\n");
do
{
gets(p);
state = isDigit(p);
if (state) arr[index++] = atoi(p);
} while (p[0] != '\0' && state && index < 10);
for (i=0; i < index; i++)
printf("%d ", arr[i]);
return 0;
}
int isDigit(const char *str)
{
size_t i, len = strlen(str);
if (len == 0) return 0;
for (i = 0; i < len; i++)
if (!isdigit(str[i]))
return 0;
return 1;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с основами ввода-вывода, строками и цифрами.
- Объявляем функцию isDigit(), которая принимает строку и возвращает 1, если все символы строки являются цифрами, и 0 в противном случае.
- В функции main() объявляем переменные: — index — счётчик для индексации массива; — i — счётчик для цикла; — arr — массив для хранения вводимых чисел; — state — флаг, который считывает значение из функции isDigit(); — p — строка, в которую считывается число.
- Выводим сообщение
Vvedit chysla(Введите числа). - Запускаем цикл do-while, который будет выполняться до тех пор, пока: — p[0] не станет нулём (что означает завершение ввода); — state не станет равным нулю (что означает, что введенная строка не является числовой); — index не станет больше 10 (что означает переполнение массива).
- Внутри цикла считываем строку с помощью функции gets() и проверяем её с помощью функции isDigit().
- Если функция isDigit() вернула 1, то преобразуем строку в целое число с помощью функции atoi() и сохраняем его в массиве arr[index++].
- После окончания цикла выводим числа, сохраненные в массиве, с помощью цикла for и функции printf().
- Возвращаем 0 из функции main(), что означает успешный конец работы программы.
- В функции isDigit() объявляем цикл for, который будет проверять каждый символ строки на цифру с помощью функции isdigit().
- Если найден хотя бы один нецифровой символ, то возвращаем 0.
- Если все символы являются цифрами, то возвращаем 1.