Определить, является ли последовательность правильной записью целого числа - 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; }
Объяснение кода листинга программы
- В начале кода объявлены функции
main
иcorect
, а также переменныеstr
иBUFSIZ
. - В функции
main
выводится сообщение, призывающее пользователя вводить только числа. - В функции
main
пользователю предлагается ввести строку, которая будет храниться в переменнойstr
. - Если последний символ введенной строки является символом новой строки (
\n
), он заменяется на символ конца строки (\0
). - В функции
main
выводится сообщение, информирующее пользователя о том, правильно ли он ввел строку. - В функции
corect
проверяется, является ли первый символ строки знаком плюс или минус. - Если первый символ является знаком плюс или минус, функция проверяет, является ли следующий символ пустым.
- Если первый символ является знаком плюс или минус, он игнорируется, и функция продолжает работу со следующим символом.
- Если первый символ не является знаком плюс или минус, функция проверяет, является ли он нулем.
- Если первый символ является нулем, функция проверяет, является ли следующий символ пустым.
- Если первый символ не является нулем, функция проверяет каждый последующий символ, чтобы убедиться, что он является цифрой.
- Если все символы в строке являются цифрами, функция возвращает
true
. - Если в строке есть нецифровые символы, функция возвращает
false
. - В функции
main
вызывается функцияcorect
, чтобы проверить введенную пользователем строку. - В функции
main
выводится сообщение, отражающее результат проверки. - В функции
main
программа завершается с успехом.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д