Возможно глупый вопрос для большинства людей тут. У меня как у человека, который начал только познавать программирование возникла некоторая проблема при написании кода в PascalAbс.NET. Собственно, ошибка:
Program1.pas(2) : Встречено ‘Uses’, а ожидалось ‘;’
Program cikl Uses GraphABC; Var r:Integer; begin for r:=460 downto 100 do begin circle(620,480,r); r:=r-35; end; FloodFill(170,480,clPurple); FloodFill(205,480,clBlue); FloodFill(240,480,clSkyBlue); FloodFill(275,480,clGreen); FloodFill(310,480,clYellow); FloodFill(345,480,clLime); FloodFill(380,480,clMoneyGreen); FloodFill(415,480,clRed); FloodFill(450,480,clMaroon); FloodFill(485,480,clBrown); FloodFill(620,480,clNavy); End.
Заранее спасибо. Если не сложно не только исправить, но объяснить в чём она была.
Источник: ru.stackoverflow.com
Free Pascal Program Tutorial 3 — Variables and Data Types — Lazarus
Ошибка ввода программа завершена program1 pas строка 6
Купить рекламу на форуме — 42 тыс руб за месяц, летом дешевле!
Участник клуба
: 1,013
Ошибка ввода записи. Паскаль
program zad1; type zap=record vert:’A’..’H’; goriz:1..8; end; var coord1:zap; coord2:zap;
при вводе символа A (английский, заглавный, символ что указан в диапазоне)
readln(coord1.vert);
выводит ошибку ввода, ни номер ошибки, ничего он не указывает, только пишет что «ошибка ввода»
При этом если указать что vert:char;
то все нормально, но мне нужен именно этот диапазон, т.к. задача про шахматы.
Не хочется ставить ни каких условие при вводе и т.п. просто интересно, почему не работает ввод именно таким образом? Что не так?
Высокая репутация
СуперМодератор
: 16,107
В Делфи всё нормально, а Паскаль не установлен.
В любом случае корректность, как мне кажется, надо проверять вручную. Делайте так:
var A: Char; . ReadLn (A); if (A < ‘A’) or (A >’H’) then // ошибка ввода else coord1.vert := A;
Источник: www.programmersforum.ru
Ошибка ввода программа завершена program1 pas строка 6
Написал программу, задание:
В файле хранится информация о каждом студенте группы: фамилия и оценки по трем предметам. Переписать эти данные в другой файл записей, исключая сведения о неуспевающих студентах.
uses crt; type student=record surname:string; mark:array [1..3] of 2..5; end; gr=array[1..20] of student; var f,nf:file of gr; group,goodgroup:gr; i,j,n:integer; begin clrscr; write (‘Input number of students (1..20): ‘); readln (n); clrscr; assign (f, ‘group.dat’); for i:=1 to n do begin writeln; writeln (‘Input information about ‘, i, ‘ student’); with group[i] do begin write (‘Surname: ‘); readln (surname); write (‘Student’s marks by session (Math Physics InfTechnologies): ‘); read (mark[1], mark[2], mark[3]); end; end; rewrite(f); write (f, group); close (f); assign (nf, ‘goodgroup.dat’); rewrite (nf); clrscr; writeln (‘Good students:’); for i:=1 to n do begin with group[i] do begin if (mark[1]>=3)and(mark[2]>=3)and(mark[3]>=3) then begin inc(j,1); goodgroup[j]:=group[i]; write (goodgroup[j].surname, ‘ ‘); end; end; end; write (nf, goodgroup); close(nf); readkey; end.
так все в порядке, но. первый шаг счетчика <1>. Все операторы ввода-вывода работают нормально. второй шаг — пропускается оператор . То есть на экране видно следующее:
Порты ввода-вывода | Первая программа | Микроконтроллеры с нуля #4
Input information about 2 student Surname: Student’s marks by session (Math Physics InfTechnologies): |
Делалось в Turbo Pascal 7.0, пробовал в Borland Pascal, на другом ПК — все так же. Создал в делфи консольное приложение, скорировал туда этот код, подправил.. То же самое. В чем дело?
Регистрация: 08.03.2016
Сообщений: 0
Vladimir_S
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,809
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
Очень просто — во второй после <2>строке замените read на readln, и всё пойдет.
Но вот чего я никак не могу понять — это как у Вас проходит вывод сообщения Student’s marks by session. Дело в том, что у меня, как только трансляция доходит до апострофа в слове Student’s, как транслятор полагает, что строка завершена, и, не обнаружив дальше ни запятой, ни закрывающей скобки, тут же рапортует об ошибке (что, по-моему, естественно). А Вам-то как удалось такой фокус-покус провернуть (мне пришлось заменить Student’s на Student»s)?
Регистрация: 09.05.2009
Адрес: Черноземье
Сообщений: 10,939
Записей в дневнике: 10
Сказал(а) спасибо: 140
Поблагодарили 80 раз(а) в 33 сообщениях
Репутация: 28362
а, это простое раздолбайство.. немного изменил данную строку перед отправкой на форум, и не заметил, что использовал такой апостроф. В оригинале строка выглядела примерно так: «Marks of this student. «, следовательно, проблем при компиляции не было
Регистрация: 09.05.2009
Адрес: Черноземье
Сообщений: 10,939
Записей в дневнике: 10
Сказал(а) спасибо: 140
Поблагодарили 80 раз(а) в 33 сообщениях
Репутация: 28362
Спасибо тебе, Владимир, все заработало.. но как это связано?
Vladimir_S
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,809
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
Спасибо тебе, Владимир, все заработало.. но как это связано?
Знаешь. поскольку я — самоучка, отвечу несколько непрофессионально. По моему опыту, оператор read — это вообще «плохой» оператор, в том смысле, что нельзя оставлять эту операцию «подвешенной»: идут всякие глюки. То есть его можно (и нужно) использовать, например, в цикле чтения элементов строки матрицы, но завершать любое чтение нужно ТОЛЬКО оператором readln. Тогда глюков не будет. Как-то так.
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Регистрация: 09.05.2009
Адрес: Черноземье
Сообщений: 10,939
Записей в дневнике: 10
Сказал(а) спасибо: 140
Поблагодарили 80 раз(а) в 33 сообщениях
Репутация: 28362
хм, ну я тоже стараюсь его не юзать. но здесь. <минутный завис по поводу кода>ступил, когда написал его. все равно, считались бы все значения с одной строки, а потом перекинуло курсор на следующую. В общем, все нормально, спасибо
Регистрация: 01.09.2009
Сообщений: 4,396
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2544
С помощью операторов read и readln можно читать данные из текстового файла, но делать это нужно с осторожностью.
Оператор read считывает данные до разделителя, разделителем считается пробел, табуляция или конец строки (для чисел), при этом указатель файла остается перед концом строки.
readln считывает строку целиком и ставит указатель файла после символа конца строки.
Отсюда следует, что если при чтении текстового файла дважды вызвать read подряд, произойдет следующее: первый read дойдет до конца строки и остановится там, второй read начнет читать данные, но в качестве данных считает тот же конец строки и остановится на том же месте, ничего не считав.
Таким образом, read при чтении из текста подходит, если нужно читать числа, записанные в несколько колонок через разделитель (пробел или табуляцию).
При этом, после каждой операции чтения следует проверять, не повстречался ли в файле конец строки (функция eoln()) и если повстречался, перейти на следующую, с помощью вызова readln.
При этом, читать строки с помощью read нельзя, для этого существует readln.
Это описание соответствует тому, что описано в руководстве к очень старой версии Паскаля. Современные компиляторы могут вести себя неправильно.
Источник: www.tehnari.ru