Ввод только цифр - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Ребят, помогите сделать проверку. Нужно сделать так, чтобы при вводе буквы или символа (не цифры, не числа) выдавалась ошибка. Программа, ищет совершенные числа меньшие, чем введенное число. Буду признательна за вашу помощь.
#include <stdio.h>
#include <conio.h>
 main()
{
    int n;
 
    printf("n: ");
    scanf("%d",&n);
 
    for(int i=6;i<n;i++)
    {
        int sum=1;
        for(int j=2;j<=i/2;j++)
        if(i%j==0)sum+=j;
        if(sum==i) printf("%d\n",i);
    }
    getch();
}

Решение задачи: «Ввод только цифр»

textual
Листинг программы
#include <stdio.h>
#include <locale.h>
#define N 10
 int main(void)
{
setlocale(LC_ALL, "ru");
  int n,i;
    char b[N]={0};
    st:
     fgets(b,N,stdin);
 for(i=0;b[i]!='\n';i++){
        if(b[i]<'\x30' || b[i]>'\x39'){printf("Ошибка. Повторите ввод!\n"); goto st;}
        }
b[i]=b[i+1];
n=atoi(b);
for(int i=6;i<n;i++)
    {
        int sum=1;
        for(int j=2;j<=i/2;j++)
        if(i%j==0)sum+=j;
        if(sum==i) printf("%d\n",i);
    }
    return 0;
}

Объяснение кода листинга программы

Код считывает строку из стандартного ввода, проверяет, содержит ли она только цифры, и если нет, выводит сообщение об ошибке и просит повторить ввод. Затем преобразует строку в целое число и сохраняет его в переменной n. Далее, используя цикл for, код проверяет, является ли число i (начиная с 6 и до n) простым, суммируя все числа от 2 до i/2 и проверяя, равно ли это значение i. Если да, то число i выводится на экран.

  1. include - подключает файл стандартного ввода/вывода

  2. include - подключает локальные настройки

  3. define N 10 - определяет размер массива

  4. int main(void) - объявляет функцию main()
  5. setlocale(LC_ALL, ru); - устанавливает русскую локаль
  6. int n,i; - объявляет переменные n и i типа int
  7. char b[N]={0}; - объявляет массив b типа char с размером N и инициализирует его нулями
  8. st: - метка для перехода
  9. fgets(b,N,stdin); - считывает строку из стандартного ввода в массив b
  10. for(i=0;b[i]!='\n';i++){ - цикл, который проходит по всем символам строки до символа новой строки
  11. if(b[i]<'\x30' || b[i]>'\x39'){printf(Ошибка. Повторите ввод!\n); goto st;} - проверяет, является ли текущий символ цифрой, и если нет, выводит сообщение об ошибке и возвращает в начало цикла
  12. n=atoi(b); - преобразует строку в целое число и сохраняет его в переменной n
  13. for(int i=6;i<n;i++) - цикл, который проходит по числам от 6 до n
  14. int sum=1; - объявляет переменную sum типа int и инициализирует ее значением 1
  15. for(int j=2;j<=i/2;j++) - цикл, который проходит по всем числам от 2 до i/2
  16. if(i%j==0) sum+=j; - проверяет, делится ли i на j без остатка, и если да, добавляет j к сумме
  17. if(sum==i) printf(%d\n,i); - проверяет, равно ли значение переменной sum числу i, и если да, выводит i на экран
  18. return 0; - завершает функцию main() Пример ввода: 1234567890 Пример вывода: 7

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.071 из 5
Похожие ответы