Дана строка. Если она представляет собой запись целого числа, то вывести 1; если вещественного - 2 - C (СИ)

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

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

Дана строка. Если она представляет собой запись целого числа, то вывести 1; если вещественного (с дробной частью), то вывести 2; если строку нельзя преобразовать в число, то вывести 0. Простите, я уже постила эту задачу. И мне ее решили. Но там все очень сложно. Все , что там было - мы не проходили в универе. Я все же надеюсь, что кто-то сможет помочь мне ее написать простым понятным кодом, иначе я просто свихнусь(((( Приложу коды, как ее делали, но(еще раз повторюсь) меня препод на части разорвет , если это увидит. за этот код благодарю @schdub
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int GetNumType(const char * p) {
  4. if (*p == '\0') return 0;
  5. int float_sep = 0;
  6. for (;*p; ++p) {
  7. if (!isdigit(*p)) {
  8. if (*p == '.') ++float_sep; else return 0;
  9. }
  10. }
  11. if (float_sep == 0) return 1;
  12. return ((float_sep == 1 && p[-1] != '.') ? 2 : 0);
  13. }
  14. void test(const char * num) {
  15. printf("%d '%s'\n", GetNumType(num), num);
  16. }
  17. int main() {
  18. test("1");
  19. test("1.0");
  20. test("1abc");
  21. test("0.0");
  22. test(".0");
  23. test("0.");
  24. return 0;
  25. }
за этот спасибо @easybudda
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <errno.h>
  4. typedef enum NUMBERTYPE { NT_NAN = 0, NT_INTEGRAL = 1, NT_REAL = 2 } numbertype_t;
  5. numbertype_t test_number(const char * data) {
  6. long integral;
  7. double real;
  8. char * tail;
  9. errno = 0;
  10. integral = strtol(data, &tail, 10);
  11. if ( ! ( errno || *tail ) )
  12. return NT_INTEGRAL;
  13. errno = 0;
  14. real = strtod(data, &tail);
  15. if ( ! ( errno || *tail ) )
  16. return NT_REAL;
  17. return NT_NAN;
  18. }
  19. typedef char shortstring_t[256];
  20. #define get_string(s) ( scanf("%255[^\n]%*c", (s)) == 1 )
  21. int main(void) {
  22. shortstring_t str;
  23. while ( printf("Data: ") && get_string(str) ) {
  24. switch(test_number(str)) {
  25. case NT_NAN :
  26. printf("Not a number.\n");
  27. break;
  28. case NT_INTEGRAL :
  29. printf("Integral type.\n");
  30. break;
  31. case NT_REAL :
  32. printf("Real type.\n");
  33. break;
  34. default :
  35. printf("Unknown error!\n");
  36. break;
  37. }
  38. }
  39. return 0;
  40. }
помогите мне, пожалуйста

Решение задачи: «Дана строка. Если она представляет собой запись целого числа, то вывести 1; если вещественного - 2»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main() {
  4.     char str[256];
  5.     scnaf("%s", str);
  6.     int length = strlen(str);
  7.     int type = 1;
  8.     for (int i=0; i < length; ++i) {
  9.         if (str[i] == '.') {
  10.             if (type == 2) {
  11.                 type = 0;
  12.                 break;
  13.             } else {
  14.                  type = 2;
  15.             }
  16.         } else {
  17.             if (str[i] < '0' || str[i] > '9') {
  18.                 type = 0;
  19.                 break;
  20.             }
  21.         }
  22.     }
  23.     printf("type = %d\n", type);
  24. }

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

В этом коде:

  1. Объявлены две переменные: строка str и целочисленная переменная length.
  2. Вводится строка с помощью функции scanf.
  3. Вычисляется длина строки с помощью функции strlen.
  4. Инициализируется переменная type значением 1.
  5. В цикле for перебираются все символы строки.
  6. Если текущий символ равен точке (str[i] == '.'), то проверяется значение переменной type.
  7. Если type равно 2, то значение переменной type сбрасывается в 0 и цикл прерывается.
  8. Если type равно 1, то значение переменной type меняется на 2.
  9. Если текущий символ не равен точке (str[i] != '.'), то проверяется, является ли он цифрой.
  10. Если текущий символ не является цифрой (str[i] < '0' || str[i] > '9'), то значение переменной type сбрасывается в 0 и цикл прерывается.
  11. После завершения цикла выводится значение переменной type. Этот код проверяет, является ли введенная строка числом с плавающей точкой или числом с фиксированной точкой. Если это число с плавающей точкой, выводится 2, если число с фиксированной точкой, выводится 1. Если строка не является числом, выводится 0.

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


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

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

12   голосов , оценка 4.167 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы