Ввод любого типа данных и его определение - C (СИ)
Формулировка задачи:
Приветствую уважаемые программисты! Я только начал изучать СИ, с нуля. Мне нужно написать следующую программу:
Ввод = все что угодно.
Вывод = "Вы ввели ... , это - (целое число, символ, массив, с плавающей запятой и т.д.)"
Как это вообще возможно сделать, если в операторе объявления переменной я обязан указать ее тип? Более того я догадываюсь, что есть несколько способов решить данную задачу. подскажите что - нибудь?
З.Ы.
Приношу извинения, если вопрос уже поднимался. Я вроде не нашел ответа, но вдруг он уже где-то был...
Решение задачи: «Ввод любого типа данных и его определение»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <ctype.h> int main() { char *dgt, *flt, *alp, s[256]; int i = 0, j, flag_dgt = 0, flag_alp = 0, flag_flt = 0, n = 0; puts("Enter something:"); while((s[i] = getchar()) != EOF) i++; s[i] = '\0'; for(j = 0; j < i; j++){ if(isdigit(s[j])){ if(!flag_dgt && !flag_flt) dgt = &s[j]; flag_dgt = 1; } else{ if(flag_flt){ puts("You entered real number:"); for(; flt < &s[j]; flt++) printf("%c", *flt); putchar('\n'); flag_flt = 0; flag_dgt = 0; } if(flag_dgt && s[j] == '.'){ flag_flt = 1; flt = dgt; flag_dgt = 0; } if(flag_dgt && s[j] != '.'){ puts("You entered integer:"); for(; dgt < &s[j]; dgt++) printf("%c", *dgt); putchar('\n'); flag_dgt = 0; } if(isalpha(s[j])){ if(!flag_alp){ alp = &s[j]; flag_alp = 1; } n++; } else{ if(flag_alp){ if(n == 1){ printf("You entered letter %c.\n", *alp); n = 0; flag_alp = 0; } if(n > 1){ puts("You entered line:"); for(; alp < &s[j]; alp++) printf("%c", *alp); putchar('\n'); flag_alp = 0; } } printf("You entered symbol\n %c\n", s[j]); } } } return 0; }
Объяснение кода листинга программы
Ввод данных:
- Вводится строка, представляющая собой ввод пользователя.
- Строка сохраняется в буфере, представленном массивом символов s.
- Цикл while считывает каждый символ из ввода пользователя и сохраняет его в массиве s.
- Когда достигается конец файла (EOF), цикл завершается.
- В массиве s последний символ устанавливается в нулевой символ, обозначающий конец строки.
- Затем начинается цикл for, который проходит через каждый символ в массиве s.
- Внутри цикла проверяется, является ли текущий символ цифрой.
- Если да, то проверяется, была ли уже обнаружена цифра или десятичная дробь.
- Если это первая цифра, то она сохраняется в переменной dgt для обработки десятичной дроби.
- Если обнаружена десятичная дробь, то она выводится на экран как десятичная дробь.
- Если обнаружена буква, то она выводится на экран как буква.
- Если обнаружен символ, отличный от буквы или цифры, то он выводится на экран как символ.
- Если обнаружено несколько букв, то они выводятся на экран как строка.
- Если обнаружено несколько цифр, то они выводятся на экран как число.
- Если обнаружена десятичная дробь, то она выводится на экран как десятичная дробь.
- Если обнаружен символ, отличный от буквы или цифры, то он выводится на экран как символ.
- После обработки всех входных данных программа завершается.
- Ввод и вывод программы осуществляется с помощью функций puts и printf из библиотеки stdio.h.
- Библиотека ctype.h используется для проверки, является ли символ буквой, цифрой или символом.
- Библиотека stdlib.h используется для считывания символов из ввода пользователя и для работы с памятью.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д