Определить, какие цифры числа встречаются несколько раз (с защитой от неверного ввода) - C (СИ)
Формулировка задачи:
Ввести натуральное число и определить, какие цифры встречаются несколько раз.
Пример:
Введите число >= 0: Введите число >= 0:
2323 1234
Повторяются: 2, 3 Нет повторов.
Решение задачи: «Определить, какие цифры числа встречаются несколько раз (с защитой от неверного ввода)»
textual
Листинг программы
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int main () {
char str[81];
int ch,k=0,i,c[10];
printf ("\nPrint digits, ENTER is OK, ESC is exit\n");
do {
fflush(stdin);
ch=getch();
if (ch>='0' && ch<='9') {
printf ("%c",ch);
str[k++]=ch;
}
else if (ch==13) {
if (k>0) {
for (i=0; i<10; i++) c[i]=0;
for (i=0; i<k; i++) c[str[i]-'0']++;
printf ("\nRepeating: ");
for (i=0; i<10; i++) if (c[i]>1) printf ("%d ",i);
printf ("\nNo repeating: ");
for (i=0; i<10; i++) if (c[i]==1) printf ("%d ",i);
k=0;
}
else printf ("\nNo digits!");
printf ("\nTry it again, baby\n");
}
} while (ch!=27);
return 0;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы:
для работы с выводом на экран, для работы с клавиатурой и для работы с массивами. - Объявляем переменные:
- char str[81] - строка, в которую будут добавляться введенные цифры.
- int ch,k=0,i,c[10] - переменные для подсчета повторяющихся цифр.
- Выводим сообщение с просьбой ввести цифры и нажимать ENTER, а при нажатии ESC завершать программу.
- Запускаем бесконечный цикл do-while, который будет выполняться до тех пор, пока не будет нажата клавиша ESC (27).
- В каждой итерации цикла с помощью функции fflush(stdin) очищаем буфер ввода от предыдущих значений и считываем очередную цифру с помощью функции getch().
- Если считанная цифра больше или равна '0' и меньше '9', то она добавляется в строку str[k++].
- Если считанная цифра равна 13 (нажатие ENTER), то проверяем, были ли введены цифры. Если да, то подсчитываем количество повторений каждой цифры и выводим список повторяющихся цифр.
- Если считанная цифра не является цифрой от '0' до '9', то выводим сообщение об ошибке и просим ввести цифры заново.
- После завершения цикла do-while возвращаем 0, что означает успешное завершение программы.