Ввод любого типа данных и его определение - 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 используется для считывания символов из ввода пользователя и для работы с памятью.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д