클래스에 대한 프로그래밍 할당을 알 수 있습니다. 만기가 오래되었으며 포인트를 얻지는 못했지만 곧 테스트가 나오고 ADA의 특정 기능을 사용하는 방법을 알고 싶습니다. 이 프로그램은 지금은 다르다. 초기 프로 시저 인 TestStudent에 test put 문을 써서 실행하면 GetStudent가 제대로 출력 할 것이다. 그러나 지금은 바닥, 선 (96)로 이동하고,왜 Ada 오류가 발생합니까?
with Ada.Text_IO;
use Ada.Text_IO;
with Ada.Integer_Text_IO;
USE Ada.Integer_Text_IO;
WITH Ada.Float_Text_IO;
USE Ada.Float_Text_IO;
procedure StudentFileLab is
------------------------------------------------------------------------
--| This program stores records in an array, reading them in from a file
--| and writing them out.
------------------------------------------------------------------------
subtype NameType is String(1..30);
subtype IDType is natural range 0..9999;
subtype GPAType is float range 0.0..4.0;
type StudentRecord is record
ID : IDType;
GPA : GPAType;
Name : NameType := (others => ' ');
end record;
subtype StudentIndex is integer range 1..100;
TYPE StudentArrayType IS ARRAY (StudentIndex) OF StudentRecord;
-- Specification of input procedure. You are to write the body.
PROCEDURE GetStudent (File: IN File_Type; Student : OUT StudentRecord) is
Length : Integer;
BEGIN
For I In 0..Length Loop
Get(File, Student.ID);
For J In 0..Length Loop
Get(File, Student.GPA);
For K In 0..Length Loop
Get_Line (File, Student.Name, Length);
End Loop;
END LOOP;
End LOOP;
END GetStudent;
PROCEDURE PutStudent (Student : IN StudentRecord) IS
BEGIN
FOR Studentlist IN StudentIndex LOOP
Put (Student.ID,
width => 0);
Put (Item => " ");
Put (Student.GPA,
Exp => 0,
Fore=> 0,
Aft => 0);
Put (Item => ", ");
Put (Student.Name);
New_Line;
END LOOP;
END PutStudent;
StudentList : StudentArrayType; -- our array of students
CurrentIndex : Natural := 0; -- the index to the current array item
CurrentStudent : StudentRecord; -- the current student
Filename : String(1..30); -- name of the data file
Flength : Integer; -- length of the name of the data file
Infile : File_Type;
begin -- StudentLab
Put_Line(Item=>"Welcome to the Student Information Program.");
Put_Line(Item=>"Please enter the student filename: ");
Get_Line(Item=> Filename, Last => Flength);
Open(File => Infile, Mode => In_File, Name => Filename(1..Flength));
loop
-- Get the next student
GetStudent(File=> infile, Student => CurrentStudent);
exit when CurrentStudent.Id = 0;
CurrentIndex := CurrentIndex + 1;
StudentList(CurrentIndex) := CurrentStudent;
END LOOP;
close(file=>infile); -- close the data file after all data is read.
-- Output the header for the nicely formatted output.
FOR Index IN 1..CurrentIndex loop
PutStudent(Student => StudentList(Index));
end loop;
end StudentFileLab;
프로그램은 다음과 같습니다 파일에서 읽을하도록되어 최종 오류를 가져옵니다.
1435 3.75 Jane Smith
2233 2.94 Robert Robertson
9634 3.86 Jennie Diver
4325 3.42 Matt Pratt
0
따라서 96 번째 줄은 말 그대로 루프 줄입니다.
FOR Index IN 1..CurrentIndex loop
PutStudent(Student => StudentList(Index));
-----> end loop;
내가 틀릴 수도 있지만 내 주요 문제 같은 느낌이 여기에 본 PutStudent의 몸 지금 :
FOR Studentlist IN StudentIndex LOOP
Put (Student.ID,
width => 0);
Put (Item => " ");
Put (Student.GPA,
Exp => 0,
Fore=> 0,
Aft => 0);
Put (Item => ", ");
Put (Student.Name);
New_Line;
END LOOP;
내가 기분이 라인의입니다하지만 난 방법을 말할 수 없다 그것을 고쳐라.
오류가 발생한 줄을 알고 계십니까? 독자가 코드에 포함시키지 마십시오. 따라서 독자는 셀 수 없습니다. – usr2564301
첫 루프에서와 같이 보이지만 처음부터 0 인 currentindex까지 1에서 반복하고 싶습니다. 이게 문제가 될 수 있니? 나는 당신이 0에서 길이 대신에 반복하고 싶다고 생각하니? –
예 그 중 하나를 통해 읽을 수 없습니다. 범위를 벗어난 배열이 있습니다. 문제를 해결하고 문제를 해결하십시오. 다음 번에 게시하기 전에 중복 및 Google에 질문을 게시하지 마십시오. – Ramulis