Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
 Аватар для Whitecrown
0 / 0 / 0
Регистрация: 23.06.2022
Сообщений: 5

Посимвольный ввод информации, выдача ошибки при неверном вводе

25.06.2022, 14:14. Показов 1182. Ответов 8

Студворк — интернет-сервис помощи студентам
Я не могу понять момент с
until(c<> ' ')and (c <> #10);
while(c<> ' ') and (c <> #10)
и ещё дебагер не работает в процедуре при попытке нажатия F8, на программе работает, но на процедуру не переходит.


Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
procedure ReadLongint(var success:boolean; var result:longint);
var
  c:char;
  res: longint;
  pos: integer;
begin
  res:=0;
  pos:=0;
  repeat
    read(c);
    pos:=pos+1
    until(c<> ' ')and (c <> #10);
    while(c<> ' ') and (c <> #10)
    do
  begin
    if (c <'0') or (c >'9')then
   begin
      writeln('Unexpected ``',c, ''''' in pos: ',pos);
      readln;
      success:=false;
      exit
   end;
      res:= res*10+ord(c)-ord('0');
      read(c);
      pos:=pos+1
  end;
      result:=res;
      success:=true
end;
 
var 
  x,y:longint;
  ok:boolean;
  begin
    repeat
      write('Please type the first number:');
      ReadLongint(ok,x)
      until ok;
      repeat
        write('Please type the second number: ');
        ReadLongint(ok,y)
        until ok;
        writeln(x,'times',y,' is ', x*y);
  end.
Добавлено через 39 минут
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.06.2022, 14:14
Ответы с готовыми решениями:

Зацикливается при неверном вводе
есть такой кусочек while(true) { scanf(&quot;%d%c%d&quot;, &amp;x, &amp;zn, &amp;y); switch (zn) { case '+': rez=x+y; ...

Вывести ошибку при неверном вводе
Всем привет! Задача: Вывести логин и пароль для сайта введенного пользователем. Если сайта нет в БД, то вывести ошибку. ...

C# Обработка исключений при неверном вводе данных
Нужно, чтобы пользователь ввел значение в переменную типа int. string b = &quot;aoaoaoa&quot;; int i = 0; while (i ==...

8
4 / 3 / 1
Регистрация: 24.06.2021
Сообщений: 15
25.06.2022, 15:18
Лучший ответ Сообщение было отмечено Whitecrown как решение

Решение

Until(c<>' ') and (c<>#10) // пока C не станет любым символом кроме пробела и пока C не станет любым символом, кроме символа 10 в таблице ASCII
While(c<>' ') and (c<>#10) // до тех пор, пока C не является пробелом и до тех пор, пока C не является 10 символом в таблице ASCII

Ты не назначил для until(c<>' ')and(c<>#10) команды, которые будут выполняться при этих условиях

Добавлено через 15 минут
укажите, пожалуйста, где строка, в которой вы используете F8
1
 Аватар для Sun Serega
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
25.06.2022, 22:13
Цитата Сообщение от zakerzan Посмотреть сообщение
в таблице ASCII
Нет, в таблице UTF16 (он же юникод обыкновенный).
Но в данном случае разницы нет - в обоих это символ переноса строки.
1
Вирусоборец
 Аватар для thyrex
14449 / 7488 / 1582
Регистрация: 06.09.2009
Сообщений: 27,132
25.06.2022, 23:41
Whitecrown, Вы пытаетесь ввести n-значное число строкой и при этом проверить корректность ввода?

Добавлено через 1 минуту
А для входа в подпрограмму в отладчике жать нужно F7.
0
1 / 1 / 0
Регистрация: 06.10.2017
Сообщений: 8
28.03.2024, 13:57
Доброго! Объясните пожалуйста, почему после выполнения части:
Code
1
2
3
4
repeat
    read(c);
    pos:=pos+1
until(c<> ' ')and (c <> #10);
при вводе, например: 1234567, после выхода из цикла с = 1 и pos = 1? Почему с не равно символу перевода строки, а pos - 7?
При выполнении аналогичного кода на Си - с = <символ перевода строки>, а pos = 7.
0
 Аватар для Sun Serega
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
28.03.2024, 14:06
Именно это объяснил zakerzan в самом первом ответе. while и until это противоположные слова.

Добавлено через 5 минут
А вообще с момента создания темы появилась функция ReadLexem, которая делает именно то что пытается сделать ТС - читает слово до первого пробельного символа (то есть пробел, перенос строки, таб, невидимый пробел, и т.д.)

Это если сохранить его как строку.
А если сразу в число перевести, и как то проверить валидность этого числа:
Pascal
1
2
3
4
5
##
var i: integer;
while not TryRead(i, 'Введите целое от 1 до 15:') or (i not in 1..15) do
  $'Неправильный ввод!'.Println;
$'i={i}'.Println;
1
1 / 1 / 0
Регистрация: 06.10.2017
Сообщений: 8
28.03.2024, 14:13
Почему такое условие понятно. Вопрос в работе read в цикле. Почему в с остаётся первый символ и в pos 1? Логично предположить, что после выполнения цикла в с должен быть последний введённый символ и соответственно в pos - индекс последнего введённого символа.
0
 Аватар для Sun Serega
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
28.03.2024, 14:34
У вас из за неправильного условия обрабатывает только первый символ, и затем сразу выходит из цикла.
1
1 / 1 / 0
Регистрация: 06.10.2017
Сообщений: 8
28.03.2024, 14:36
Всё дошло) Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.03.2024, 14:36
Помогаю со студенческими работами здесь

Событие при неверном вводе даты в DateTimePicker
Задаю параметр DateTimePicker1.Date из ячейки StringGrid. Мне надо, чтобы если пользователь ввёл неверный формат даты, содержимое ячейки...

Дублируется количество ошибок при неверном вводе
Если пользователь вводит допустим цифры у него вылазит ошибка эта ровно столько раз сколько пользователь ввел цифр do { cout...

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

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

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru