Определить, является ли последовательность правильной записью целого числа - C (СИ)

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

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

Вот мой код. Его нужно переделать. Он проверяет посимвольно, а нужно чтобы как целую строку. Изьян моего кода в том, что если написать 22+22 все же выйдет, что запись правильная. Не могу разобраться, как через gets() сделать.
#include <stdio.h>
 
int main()
{
    int c;
    printf("Enter only number! May be with sign.\n");
    while((c=getchar()) != EOF)
    {
        if((c>='0' && c<='9') ||(c=='-') || (c=='+'))
        printf("Correct entry.\n");
        else
        {
            if( (c>='a' && c<='z') || (c>='A' && c<='Z'))
                printf("Error!Replace the symbol! This is not the correct input!\n");
        }
        if((c=='.' || c==' ' || c=='\t'))
            printf("Error!Replace the symbol! This is not the correct input!\n");
    }
    return 0;
}
Код Си!
Попробовал переписать. Почему все время p=-1. +123 также говорит, что неправильный...и правильный одновременно.
#include <stdio.h>
#include<string.h>
int main()
{
    char mas[255];
    char len;
    int c, k=0, i, p=0;;
    printf("Enter only number! May be with sign.\n");
    gets(mas); 
    while((c=getchar()) != EOF)
    {
        for(i=1; i<(strlen(mas)); i++)
        {
            if(mas[0] == '+' || mas[0] == '-')
            k=1;
            if((mas[i]>='0' && mas[i]<='9'))
            k=1;
            if( (mas[i]>='a' && mas[i]<='z') || (mas[i]>='A' && mas[i]<='Z'))
            p=-1;
            if((mas[i]=='.' || mas[i]==' ' || mas[i]=='\t'))
            p=-1;
        }
    }
    len=strlen(mas);
    printf("\nThe lenght is: %d\n", strlen(mas));
    if(p=-1)
    {
    printf("F\n");
    }
    if(k>0)
    printf("R\n");
    return 0;
}

Решение задачи: «Определить, является ли последовательность правильной записью целого числа»

textual
Листинг программы
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdbool.h>
 
bool corect(const char *);
 
 
int main(void){
    printf("Enter only number! May be with sign.\n");
    char str[BUFSIZ];
    fgets(str, BUFSIZ, stdin);
    
    if (str[strlen(str)-1] == '\n')  str[strlen(str)-1] = '\0';
    
    printf("str: %s  is  %s\n", str, corect(str) ? "ok" : "no");
    
    return EXIT_SUCCESS;
}
 
 
bool corect(const char *str){   
    if (*str == '-' || *str == '+'){
        if (*(str + 1) == '\0')  return false;
        
        ++str;
    }
    
    if (*str == '0')  return *++str == '\0';
    
    for (; *str; ++str){
        if (!isdigit(*str))  return false;
    }
    
    return true;
}

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

  1. В начале кода объявлены функции main и corect, а также переменные str и BUFSIZ.
  2. В функции main выводится сообщение, призывающее пользователя вводить только числа.
  3. В функции main пользователю предлагается ввести строку, которая будет храниться в переменной str.
  4. Если последний символ введенной строки является символом новой строки (\n), он заменяется на символ конца строки (\0).
  5. В функции main выводится сообщение, информирующее пользователя о том, правильно ли он ввел строку.
  6. В функции corect проверяется, является ли первый символ строки знаком плюс или минус.
  7. Если первый символ является знаком плюс или минус, функция проверяет, является ли следующий символ пустым.
  8. Если первый символ является знаком плюс или минус, он игнорируется, и функция продолжает работу со следующим символом.
  9. Если первый символ не является знаком плюс или минус, функция проверяет, является ли он нулем.
  10. Если первый символ является нулем, функция проверяет, является ли следующий символ пустым.
  11. Если первый символ не является нулем, функция проверяет каждый последующий символ, чтобы убедиться, что он является цифрой.
  12. Если все символы в строке являются цифрами, функция возвращает true.
  13. Если в строке есть нецифровые символы, функция возвращает false.
  14. В функции main вызывается функция corect, чтобы проверить введенную пользователем строку.
  15. В функции main выводится сообщение, отражающее результат проверки.
  16. В функции main программа завершается с успехом.

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


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

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

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