Вопрос задан 09.07.2023 в 01:30. Предмет Информатика. Спрашивает Рязанов Ваня.

Вопрос по паскалю( Желательно ответить подробно на вопрос) Не могу понять почему не работают

одновременно типы данных: String и Integer. Взять ситуацию: var a:string; var b:integer; begin writeln('fff'); read(a); read(b); writeln(a); end. То он смотрит сначала переменную a(стринг) и можно вводить слово для ответа(допустим), а потом в b - любую интовую. А если наоборот сделать: т.е местами порядок поменять: var a:string; var b:integer; begin writeln('fff'); read(b); read(a); writeln(a); end. Т.е меняем местами Рид а и б. То тогда он посмотрит интовую переменную и просто пропустить b(стринговую) и программа закрывается. Почему так работает? как это фиксить? чем их мирить?
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Кукушкин Слава.

Ответ:

привет. если используешь read, он на новую строку не переходит, и обе переменных надо писать через пробел. используй лучше readln и ни каких проблем не будет

0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Проблема, с которой вы сталкиваетесь, связана с тем, как происходит ввод данных в Pascal. Давайте разберемся подробнее.

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

В вашем коде:

pascal
var a: string; b: integer; begin writeln('fff'); read(b); // Ввод целочисленного значения read(a); // Ввод строки writeln(a); end.

Когда вы вводите целочисленное значение, например, 123, функция read(b) считывает это значение как целое число. Однако введенное число оставляет во входном буфере символ перевода строки (Enter), который нажимается после ввода. Когда происходит попытка считать строку с помощью read(a), она немедленно "вытаскивает" этот символ перевода строки из буфера и завершает считывание строки. В итоге, a становится пустой строкой.

Аналогично, если вы меняете порядок считывания:

pascal
var a: string; b: integer; begin writeln('fff'); read(a); // Ввод строки read(b); // Ввод целочисленного значения writeln(a); end.

Когда вы вводите строку, например, "hello", функция read(a) считывает это значение как строку. Затем, когда происходит попытка считать целочисленное значение с помощью read(b), она обнаруживает, что в буфере осталась часть введенной строки "hello", и пытается прочитать целое число из этой строки. Поскольку начало строки "hello" не представляет собой целое число, происходит ошибка, и программа может завершиться аварийно.

Чтобы избежать таких проблем, рекомендуется использовать функции ввода, которые более точно определяют, какие данные ожидать. Например, вы можете использовать функции readln для считывания строк и read для считывания чисел. Это обеспечит более надежное чтение ввода:

pascal
var a: string; b: integer; begin writeln('fff'); readln(a); // Ввод строки read(b); // Ввод целочисленного значения writeln(a); end.

Также стоит обратить внимание, что после считывания числа вы можете вставить вызов функции readln, чтобы считать символ перевода строки, который остался в буфере, перед тем как считывать строку:

pascal
var a: string; b: integer; begin writeln('fff'); readln(a); // Ввод строки readln(b); // Ввод целочисленного значения writeln(a); end.

Таким образом, вы сможете более надежно управлять вводом и избежать подобных проблем.

0 0

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос