Перейти к содержимому

Как сделать ввод с клавиатуры с

  • автор:

Клуб программистов

В этой книге ваши программы использовали выходной поток cout для отображения вывода на экран. Из данного урока вы узнаете, что C++ обеспечивает входной поток с именем cin, из которого программы могут читать информацию, введенную пользователем с клавиатуры. При использовании cin для чтения ввода с клавиатуры вы указываете одну или несколько переменных, которым cin будет присваивать входные значения. К тому времени, когда вы закончите этот урок, вы освоите следующие основные концепции:

  • Вы можете использовать входной поток cin для присваивания определенным переменным символов и чисел, введенных с клавиатуры.
  • При применении cin для чтения и присваивания переменной значения, введенного с клавиатуры, можно использовать содержимое переменной так, как если бы ваша программа использовала оператор присваивания для сохранения значения в переменной.
  • Когда ваша программа использует cin для выполнения ввода с клавиатуры, остерегайтесь ошибок переполнения и ошибок, возникающих при вводе пользователем значения неверного типа.

Как вы уже знаете, если ваши программы используют выходной поток cout, они помещают данные в поток с помощью оператора вставки (<<). Подобным образом, если ваши программы применяют cin для чтения ввода с клавиатуры, они будут использовать оператор извлечения (>>).

ПЕРВОЕ ЗНАКОМСТВО С cin

Точно так же как выходной поток cout позволяет вашим программам записать вывод на экран, входной поток cin позволяет программам читать ввод с клавиатуры. Когда программы используют cin для чтения ввода с клавиатуры, они должны указать переменную, в которую cin поместит данные. Следующая программа FIRSTCIN.CPP использует cin для чтения числа, введенного с клавиатуры. Программа присваивает введенное число переменной с именем number, а затем выводит значение переменной, используя выходной поток cout:

Когда вы откомпилируете и запустите эту программу, на вашем экране появится сообщение, предлагающее вам ввести ваше любимое число. Если вы введете число и нажмете ENTER, программа присвоит ввод переменной number. Затем, используя cout, программа выведет сообщение, отображающее ваше любимое число.

Следующая программа TWONBRS.CPP запрашивает у вас два числа. Программа присваивает числа переменным first и second. Затем программа выводит числа, используя cout:

Обратите внимание на использование с cin двух операторов извлечения:

В этом случае cin присвоит первое введенное значение переменной first, a второе переменной second. Если для вашей программы требуется третье значение, вы можете использовать третий оператор извлечения, как показано ниже:

Если вы применяете cin для чтения чисел с клавиатуры, cin использует левый пустой символ (пробел, табуляцию, возврат каретки), чтобы определить, где начинается одно значение, а где второе. Экспериментируйте с программой TWONBRS, разделяя числа табуляцией, пробелом и возвратом каретки.

Чтение ввода с клавиатуры с помощью cin

Для чтения ввода с клавиатуры программы могут использовать входной поток cin. При использовании cin вы должны указать переменную, в которую cin помещает данные. Затем используйте оператор извлечения (>>) для направления данных, как показано ниже:

cin >> some_variable;

Оператор извлечения называется так, потому что он извлекает (удаляет) данные из входного потока, присваивая значение указанной переменной.

Следите за ошибками переполнения

Если ваши программы выполняют ввод с использованием cin, остерегайтесь возможных ошибок, возникающих при вводе пользователем неверного числа. Например, запустите программу FIRSTCIN, которую вы только что создали. Когда программа запросит вас ввести ваше любимое число, введите число 1000000 и нажмите ENTER. При этом программа не сможет отобразить число 1000000 в качестве введенного значения. Вместо этого возникнет ошибка переполнения, так как 1000000 превышает наибольшее значение, которое может хранить тип int.

Если вы внимательно рассмотрите программу FIRSTCIN. CPP, то обратите внимание, что cin присваивает введенное число переменной типа int. Как вы узнали из урока 4, переменные типа int могут хранить значения только в диапазоне от -32768 до 32767. Поскольку переменная типа int не может вместить значение 1000000, возникает ошибка. Запустите программу еще несколько раз, вводя отрицательные и положительные числа. Обратите внимание на ошибки, которые возникают, если вы выходите за допустимые пределы значений для той переменной, в которую cin помещает ввод.

Следите за ошибками несовпадения типов

Как уже обсуждалось, программа FIRSTCIN.CPP предполагает, что пользователь вводит значение в диапазоне от -32768 до 32767. Если вместо ввода числа вне этого диапазона, пользователь вводит буквы или другие символы, то возникает другая ошибка — ошибка несовпадения типов. Другими словами, программа ожидала значение одного типа (int), а пользователь ввел значение другого типа (char). Для примера запустите программу второй раз. Когда программа запросит число, введите буквы АВС. Как и раньше, возникнет ошибка, поскольку программа ожидает целое число, а не буквы.

Выполните подобные эксперименты с программой TWONBRS, вводя бессмысленные значения или числа с плавающей точкой. Вы обнаружите, что программа наталкивается на те же ошибки. В последующих уроках вы научитесь выполнять операции ввода таким образом, чтобы уменьшить возможность подобных ошибок. А сейчас просто помните, что такие ошибки могут возникать.

Чтение символьных данных

Обе предыдущие программы использовали cin для чтения целых чисел в переменные типа int. Следующая программа CIN_CHAR.CPP использует входной поток cin для чтения символов с клавиатуры. Как видите, программа читает символ в переменную типа char.

Откомпилируйте и поэкспериментируйте с данной программой, вводя более одного символа и наблюдая за реакцией программы. Вы обнаружите, что программа каждый раз работает только с одним символом.

Чтение слов с клавиатуры

Во второй части данной книги вы научитесь сохранять слова или даже строки текста в одной переменной. Там же вы узнаете, как использовать входной поток cin для чтения слов и целых строк. А сейчас можете создать свою собственную простую программу, которая читает значения типа float или long. Например, следующая программа CIN_LONG.CPP использует cin для чтения значения типа long:

Как и раньше, поэкспериментируйте с этой программой, вводя очень большие числа (и отрицательные тоже).

Перенаправление В/В и входной поток cin

Как вы уже знаете из урока 3, если ваши программы используют выходной поток cout, пользователь может перенаправить вывод программы с экрана дисплея в файл или на принтер. Как уже обсуждалось, выходной поток cout соответствует стандартному выводу операционной системы. Подобным образом входной поток cin соответствует стандартному вводу операционной системы. В результате, если ваша программа использует cin для выполнения операций ввода, пользователь может перенаправить ввод программы с клавиатуры на файл. В последующих уроках вы научитесь писать программы, которые читают и обрабатывают перенаправленный ввод.

ЧТО ВАМ НЕОБХОДИМО ЗНАТЬ

В этом уроке вы научились использовать входной поток cin для выполнения ввода с клавиатуры. Как вы уже знаете, если ваши программы используют cin для чтения ввода с клавиатуры, вам следует указать переменные, которым cin присваивает вводимые значения. В уроке 7 вы научитесь использовать оператор C++ if, чтобы позволить программам принимать собственные решения. Однако перед тем, как приступить к уроку 7, убедитесь, что вы освоили следующие основные концепции:


    1. C++ предоставляет входной поток cin, который ваши программы могут использовать для чтения ввода с клавиатуры.
    2. Если программы для чтения ввода используют cin, они должны указать одну или несколько переменных, в которые cin будет помещать данные.
    3. Чтобы направить ввод в переменную, вам следует использовать cin с оператором извлечения (>>).
    4. При применении cin для чтения нескольких значений, cin использует пустые символы (пробел, табуляция или возврат каретки), чтобы определить, где заканчивается одно значение и начинается другое.
    5. Если пользователь вводит неверные данные, могут возникать ошибки переполнения или несоответствия типов, а значения, присвоенные входным потоком cin переменным вашей программы, будут неверны.

    Как сделать ввод с клавиатуры с

    При запуске программы на Си автоматически открываются ряд потоков, основными из которых являются следующие:

    • Стандартный поток ввода stdin
    • Стандартный поток вывода stdout
    • Стандартный поток вывода сообщений об ошибках stderr

    Стандартный поток ввода stdin по умолчанию соответствует клавиатуре, а потоки stdout и stderr — экрану монитора.

    Для управления вводом-выводом с помощью этих потоков используются ряд функций:

    • getchar() : ввод с клавиатуры одного символа
    • putchar() : вывод на консоль одного символа
    • fgets() : ввод одной строки
    • puts() / fputs() : вывод одной строки на консоль
    • scanf() : ввод с консоли с форматированием данных
    • sscanf() : ввод с из строки с форматированием данных
    • printf() : вывод с форматированием данных

    Функции printf и scanf уже рассматривались ранее, поэтому посмотрим, как применять остальные функции.

    Ввод и вывод символов

    Для ввода и вывода символа применяются функции getchar() и putchar() . Но следует сказать, что на самом деле они полноценными функциями не являются, а определены как макросы в заголовочном файле stdio.h :

    #define getchar() getc(stdin) #define putchar(c) putc((c), stdout)
    Вывод символа

    Для вывода отдельного символа на консоль предназначена функция putchar() со следующим прототипом:

    int putchar(int c);

    Выводимый символ в виде числового кода передается в putchar в качестве параметра, он же возвращается функцией.

    #include int main(void) < char c = 'A'; putchar(c); // Выводим символ A >
    Ввод символа

    Для ввода одного символа с клавиатуры применяется функция getchar() , которая имеет следующий прототип:

    int getchar(void);

    В качестве результата функция возвращает числовой код введенного символа.

    При использовании функции getchar следует учитывать, что при печати текста посредством клавиатуры в буфер операционной системы заносятся коды печатаемых символов, а сами символы отображаются на экране. Поучение программой введенного символа из буфера производится с помощью нажатия клавиши Enter.

    И если буфер операционной системы не пуст, то при вызове функции getc() она получает очередной символ из буфера. Если же буфер пуст, то происходит чтение байта из потока ввода с помощью системной функции, название которой зависит от операционной системы.

    При этом при нажатии клавиши Enter, в буфер также помещается код этой клавиши. То есть если мы введем один символ и нажмем на Enter, в буфере окажутся два числовых кода — введенного символа и клавиши Enter. И это надо учитывать при работе с функцией getchar. В частости, рассмотрим простой, но показательный пример:

    #include int main(void) < printf("1"); getchar(); // ожидание ввода символа printf("2"); getchar(); // ожидание ввода символа printf("3"); return 0; >

    Сначала на экран выводится цифра 1, после чего функция getchar ожидает ввода символа. Если после ввода символа мы нажмем Enter, то в буфер будет помещены два числовых кода — введеного символа и клавиши Enter. Поэтому при втором вызове getchar эта функция считывает байт из буфера — то есть числовой код клавиши Enter.

    Например, введем при первом вызове функции getchar символ «a», а затем Enter:

    1a 23

    Но если при каждом вызове getchar мы будем только нажимать клавишу Enter, тогда в буфер будет заноситься только код этой клавиши, и соответственно программа будет работать, как и ожидалось:

    1 2 3

    Применим функции getchar и putchar для ввода и вывода символов с клавиатуры:

    #include int main(void) < int c; while((c=getchar())!=EOF) < putchar(c); >return 0; >

    Функция getchar() считывает числовой код символа, который потом выводится в функции putchar() . Для вывода из программы необходимо ввести комбинацию клавиш Ctrl+C.

    Ввод и вывод строк

    Вывод строк и puts

    Для вывода одной строки на консоль предназначена функция puts() со следующим прототипом:

    int putchar(char *s);

    В качестве параметра передается указатель на строку, а возвращаемым результатом функции является последний выведенный символ.

    При этом функция puts() будет выводить символы переданной строки, пока не дойдет до нулевого символа ‘\0’. Если же выводимый массив символов не содержит этого символа, то результат программы неопределен. Например:

    #include int main(void) < puts("Hello World"); // выводим строковый литерал char* name = "Hello Metanit.com"; puts(name); // выводим значение переменной return 0; >
    Hello World Hello Metanit.com
    Вывод строк и fputs

    Функция fputs() также записывает в поток вывода строку, то есть набор символов, который завершается символом ‘\0’. При записи строки нулевой символ ‘\0’ не записывается. Она имеет следующий прототип:

    int fputs(const char *s, FILE *stream);

    Первый параметр функции — записываемая строка, а второй — указатель на поток вывода. В качестве результата функция возвращает неотрицательное целое число. При ошибках в процессе записи возвращается значение EOF .

    Применим функцию для записи в стандартный поток вывода, то есть на консоль. В этом случае в качестве второго параметра надо передать значение stdout :

    #include int main(void)

    Ввод строк и fgets

    Для ввода строки с клавиатуры применяется функция fgets() , которая имеет следующий прототип:

    char *fgets(char *str, int count, FILE *stream);
    • char *str : строка, в которую производится считывание.
    • int count : сколько символов необходимо считывать.
    • FILE *stream : файловый поток, из которого производится считывание. В качестве потока ввода может выступать и консольный ввод.

    Функция fgets() прекращает считывание, когда пользователь нажимает клавишу ENTER, то есть когда в поток добавляется символ перевода строки.

    Рассмотрим считывание строки с консоли. Для этого в качестве третьего параметра в функцию передается значение stdin :

    #include #define MAX 15 int main(void)

    Здесь функция fgets считывает не более 15 символов в строку name, а В реальности функция предложит ввести 14 символов, так как последний символ зарезервирован для нулевого символа ‘\0’. Если будет введено больше символов, то fgets все равно считает не более 15 символов. Таким образом функция позволяет проверить количество считываемых символов и поэтому считается безопасной.

    Пример работы программы:

    Enter name: Tom Smith Your name: Tom Smith

    Стоит отметить, что функция fgets() возвращает указатель char * — указатель на буфер, в который считаны данные. В реальности это тот же самый буфер, который передавался в качестве первого параметра, то есть в примере выше — это массив name. Однако этот результат может нам пригодится для проверки успешности выполнения функции — если считывание прошло неудачно, то функция возвращает NULL :

    #include #define MAX 15 int main(void) < char name[MAX]; printf("Enter name: "); if(fgets(name, MAX, stdin) != NULL) // if(fgets(name, MAX, stdin)) - можно сократить < printf("Your name: %s\n", name); >else < printf("Critical Error. "); >return 0; >

    Для эмуляции ошибки можно передать в функцию вторым параметром число 0.

    fgets и scanf

    При использовании функции fgets() после функции scanf() мы можем столкнуться с некорректным вводом:

    #include #define N 32 int main(void) < int age; char name[N]; // считываем возраст в переменную age printf("Input age: "); scanf("%d", &age); // считываем строку в переменну. name printf("Input name: "); fgets(name, N, stdin); // проверяем ввод printf("Age: %d\n", age); printf("Name: %s\n", name); >

    В данном случае сначала с помощью функции scanf() считываем число в переменную age. После этого считываем имя — строку с помощью функции fgets() в переменную name. Но посмотрим, какой будет результат работы программы:

    Input age: 39 Input name: Age: 39Name:

    В данном случае мы видим, что ввод имени с помощью fgets вроде как пропускается. По крайней мере мы не можем ввести имя, а программа сразу же выводит результат.

    Все дело в том, что функция scanf() считывает именно то, что ей предписано — число в виде переменной типа int. Все остальные символы остаются в буфере, в который предварительно попадают введенные с клавиатуры символы. Так, после ввода возраста мы нажимаем на клавишу Enter, и в буфер попадает символ «\n», то есть перевод строки. И fgets считывает этот символ из буфера, после чего ввод имени завершается. Очевидно, это не то поведение, на которое мы рассчитывали.

    Чтобы исправить ситуацию, мы можем использовать различные хаки. Рассмотрим пару из них. Все они сводятся к тому, чтобы вынуть из буфера этот символ перевода строки.

    Первый способ — считывание символа с помощью вызова scanf(«%*c») :

    #include #define N 32 int main(void) < int age; char name[N]; // считываем возраст в переменную age printf("Input age: "); scanf("%d", &age); scanf("%*c"); // вытаскиваем символ из буфера // считываем строку в переменну. name printf("Input name: "); fgets(name, N, stdin); // проверяем ввод printf("Age: %d\n", age); printf("Name: %s\n", name); >

    Второй способ — мы можем считать символ с помощью getchar() :

    #include #define N 32 int main(void) < int age; char name[N]; // считываем возраст в переменную age printf("Input age: "); scanf("%d", &age); getchar(); // вытаскиваем символ из буфера // считываем строку в переменну. name printf("Input name: "); fgets(name, N, stdin); // проверяем ввод printf("Age: %d\n", age); printf("Name: %s\n", name); >

    Результат работы программы:

    Input age: 39 Input name: Tom Age: 39 Name: Tom

    C# — научиться или умереть

    После того долгого знакомства с переменными, этот урок может показаться быстрым и легким. Ну, в общем, ReadLine() — это еще один способ присвоить переменной значение.

    Console.Write(\»Введите имя и нажмите Enter: \»); string name = Console.ReadLine(); Console.WriteLine(\»Привет, \» + name + \»!\»)

    Фух! Миссия завершена! За три строки кода, мы запросили ввод, сохранили его и использовали. Вовсе не обязательно писать метод Write() перед ReadLine(), просто обычно надо каким-либо образом сказать пользователю, какой тип ввода мы ожидаем. Это просто вежливо.

    Наверное, единственное затруднение — это то, что ReadLine() всегда возвращает данные строкового типа. Чтобы получить числа, надо опять же использовать методы классаConvert:

    Console.Write(\»Введите свой возраст и нажмите Enter: \»); int age = Convert.ToInt32( Console.ReadLine() ); Console.Write(\»Введите свой рост и нажмите Enter (можно использовать дроби):\»); double height = Convert.ToDouble( Console.ReadLine() ); Console.WriteLine(\»Значицца, вам лет, а рост .\», age, height);

    Надо запомнить, что без подобающего управления ошибками, программа будет выдавать ошибку каждый раз, когда мы будем пытаться конвертировать \»пингвин\»-а в число.

    А что же с ReadLine() , который мы до сих пор ставили в конце каждой программы? Мы просто использовали преимущества системы ввода С#. Когда мы использовали ReadLine() в конце программы, мы заставляли С# терпеливо ждать, пока пользователь завершит ввод и нажмет ENTER. Когда ENTER нажат, программа собирает всю информацию, что ввел пользователь и . ничего с ней не делает, потому что мы не присваиваем значение никакой переменной. Поэтому С# остается только пожать плечами, забыть все, что ввел пользователь и продолжить работу. Ну разве не грех не использовать такую возможность?

    В любом случае, ввод пользователя один из самых коварных аспектов программирования. Невозможно перечислить количество случаев, когда неожиданный ввод может привести программу к внезапному краху! Позже мы узнаем, как же все-таки управляться с глупостью некоторых пользователей, а пока надо запомнить: любая часть кода, которая зависит от внешних данных, будь то ввод с консоли, текстовый файл, или сетевой накопитель — это потенциальная опасность краха и с ней надо обращаться с должной осторожностью. Ну, что ж, самое время для примера кода:

    using System; namespace C_ConsoleInput < class Class1 < [STAThread] static void Main(string[] args) < // Запросить имя пользователя Console.Write(\"Введите имя и нажмите Enter: \"); // Прочесть данные; присвоить значение переменной \"name\" string name = Console.ReadLine(); // \"name\" можно использовать как обычную переменную Console.WriteLine(\"Hello, \" + name + \"!\"); // Сделаем это снова, только теперь запросим тип пиццы Console.Write(\"Введите название пиццы и нажмите Enter: \"); string pizza = Console.ReadLine(); // А теперь используем обе переменные Console.WriteLine(\"Привет, ! Одна пицца на подходе!\", name, pizza); // Используем ReadLine() с численными типами Console.Write(\"Введите свой возраст и нажмите Enter: \"); int age = Convert.ToInt32( Console.ReadLine() ); Console.Write(\"Введите свой рост и нажмите Enter (можно использовать дроби): \"); double height = Convert.ToDouble( Console.ReadLine() ); Console.WriteLine(\"Значицца, вам лет, а рост .\", age, height); // А теперь попросим пользователя нажать \"Enter\" для выхода из программы Console.Write(\"Программа завершена. Нажмите \\\"Enter\\\" для выхода. \"); Console.ReadLine(); > > >

    Как сделать ввод с клавиатуры с

    Для вывода информации на консоль мы уже использовали встроенный метод Console.WriteLine . То есть, если мы хотим вывести некоторую информацию на консоль, то нам надо передать ее в метод Console.WriteLine:

    string hello = "Привет мир"; Console.WriteLine(hello); Console.WriteLine("Добро пожаловать в C#!"); Console.WriteLine("Пока мир. "); Console.WriteLine(24.5);
    Привет мир! Добро пожаловать в C#! Пока мир. 24,5

    Нередко возникает необходимость вывести на консоль в одной строке значения сразу нескольких переменных. В этом случае мы можем использовать прием, который называется интерполяцией:

    string name = "Tom"; int age = 34; double height = 1.7; Console.WriteLine($"Имя: Возраст: Рост: м");

    Для встраивания отдельных значений в выводимую на консоль строку используются фигурные скобки, в которые заключается встраиваемое значение. Это можем значение переменной ( ) или более сложное выражение (например, операция сложения ). А перед всей строкой ставится знак доллара $.

    При выводе на консоль вместо помещенных в фигурные скобки выражений будут выводиться их значения:

    Имя: Tom Возраст: 34 Рост: 1,7м

    Есть другой способ вывода на консоль сразу нескольких значений:

    string name = "Tom"; int age = 34; double height = 1.7; Console.WriteLine("Имя: Возраст: Рост: м", name, height, age);

    Здесь мы видим, что строка в Console.WriteLine содержит некие числа в фигурных скобках: , , . Это плейсхолдеры, вместо которых при выводе строки на консоль будут подставляться некоторые значения. Подставляемые значения указываются после строки через запятую.

    При этом важен порядок подобных плейсхолдеров. Например, в данном случае после строки первой указана переменная name, потом height и потом age. Поэтому значение переменной name будет вставляться вместо первого плейсхолдера — (нумерация начинается с нуля), height — вместо , а age — вместо . Поэтому в итоге пи выводе на консоль строка

    "Имя: Возраст: Рост: м"

    будет заменена на

    "Имя: Tom Возраст: 34 Рост: 1,7м"
    Console.Write

    Кроме Console.WriteLine() можно также использовать метод Console.Write() , он работает точно так же за тем исключением, что не добавляет переход на следующую строку, то есть последующий консольный вывод будет выводиться на той же строке.

    string name = "Tom"; int age = 34; double height = 1.7; Console.Write($"Имя: Возраст: Рост: м");

    Консольный ввод

    Кроме вывода информации на консоль мы можем получать информацию с консоли. Для этого предназначен метод Console.ReadLine() . Он позволяет получить введенную строку.

    Console.Write("Введите свое имя: "); string? name = Console.ReadLine(); Console.WriteLine($"Привет ");

    В данном случае все, что вводит пользователь, с помощью метода Console.ReadLine() передается в переменную name.

    Пример работы программы:

    Введите свое имя: Том Привет Том

    Особенностью метода Console.ReadLine() является то, что он может считать информацию с консоли только в виде строки. Кроме того, возможная ситуация, когда для метода Console.ReadLine не окажется доступных для считывания строк, то есть когда ему нечего считывать, он возвращаает значение null , то есть, грубо говоря, фактически отсутствие значения. И чтобы отразить эту ситуацию мы определяем переменную name , в которую получаем ввод с консоли, как переменную типа string? . Здесь string указывает, что переменная может хранить значения типа string, то есть строки. А знак вопроса ? указывает, что переменная также может хранить значение null , то есть по сути не иметь никакого значения. Далее мы более подробно разберем null и как с ним работать.

    Однако, может возникнуть вопрос, как нам быть, если, допустим, мы хотим ввести возраст в переменную типа int или другую информацию в переменные типа double или decimal? По умолчанию платформа .NET предоставляет ряд методов, которые позволяют преобразовать различные значения к типам int, double и т.д. Некоторые из этих методов:

    • Convert.ToInt32() (преобразует к типу int)
    • Convert.ToDouble() (преобразует к типу double)
    • Convert.ToDecimal() (преобразует к типу decimal)

    Пример ввода значений:

    Console.Write("Введите имя: "); string? name = Console.ReadLine(); Console.Write("Введите возраст: "); int age = Convert.ToInt32(Console.ReadLine()); Console.Write("Введите рост: "); double height = Convert.ToDouble(Console.ReadLine()); Console.Write("Введите размер зарплаты: "); decimal salary = Convert.ToDecimal(Console.ReadLine()); Console.WriteLine($"Имя: Возраст: Рост: м Зарплата: $");

    При вводе важно учитывать текущую операционную систему. В одних культурах разделителем между целой и дробной частью является точка (США, Великобритания. ), в других — запятая (Россия, Германия. ). Например, если текущая ОС — русскоязычная, значит, надо вводить дробные числа с разделителем запятой. Если локализация англоязычная, значит, разделителем целой и дробной части при вводе будет точка.

    Пример работы программы:

    Введите имя: Том Введите возраст: 25 Введите рост: 1,75 Введите размер зарплаты: 300,67 Имя: Том Возраст: 25 Рост: 1,75м Зарплата: 300,67$

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *