2017-09-21 1 views
0

기록 프로그램 작업 중입니다. 조금만 붙어 있습니다. 그들은 손 전에 입력 해당 트랙을 선택 4 -파스칼 - 매개 변수 개수가 잘못되었습니다.

program myMusicPlayer; 
uses TerminalUserInput, SysUtils; 

type 
genreType = (Comedy, Punk, Metal); 


album = record 
    albumName : String; 
    artistName : String; 
    genre : genreType; 
    tracks : array [0..4] of String; 
    location: array [0..4] of String; 
end; 

function readGenre(prompt: String): genreType; 
var 
val : Integer; 

begin 
WriteLn('1 - Comedy'); 
WriteLn('2 - Punk'); 
WriteLn('3 - Metal'); 
val := ReadInteger(prompt); 

while ((val < 1) or (val > 3)) do 
begin 
    WriteLn('Please enter a value between 1 & 3'); 
    val := ReadInteger(prompt); 
end; 

result := genreType(val-1); 
end; 

function readAlbum(const alb : album): album; 
var 
i: Integer; 

begin 
result.albumName := ReadString('Enter album name here: '); 
result.artistName := ReadString('Enter artist name here: '); 
result.genre := readGenre('Enter genre here: '); 

for i := 0 to 4 do 
begin 
    result.tracks[i] := ReadString('Enter track list here: '); 
end; 
for i := 0 to 4 do 
begin 
result.location[i] := ReadString('Enter file location here: '); 
end; 
end; 

procedure printAlbum(const toPrint: album); 
var 
i : Integer; 

begin 
WriteLn('Album title: ', toPrint.albumName); 
WriteLn('Artist name: ', toPrint.artistName); 
WriteLn('Genre: ', toPrint.genre); 

for i := 0 to 4 do 
begin 
    WriteLn('Track ', i, ' is: ', toPrint.tracks[i]); 
    WriteLn('File ', i, ' location is: ', toPrint.location[i]); 
end; 
end; 

문제는 임 사용자가 1 사이의 숫자를 선택할 수 있도록 이것을 사용하려고,이 절차 "runAlbum"로 일어나고있다. 내가 실행할 수있는 프로그램을 얻을 수 runAlbum 옆에 내가 해봤 지금 모든 것을 같이 괄호 안에 입력 할 필요가 정확히 어떤 매개 변수 불분명 오전 그러나

procedure runAlbum(prompt: String; min, max: Integer); 
var 
result : Integer; 

begin 
result := ReadInteger(prompt); 
while ((result < min) or (result > max)) do 
begin 
    WriteLn('Please select a track between', min, ' and ', max, ' to play: 
'); 
    result := ReadInteger(prompt); 
end; 
end; 

는 설정 매개 변수의 오류 "잘못된 번호를 실행 "runAlbum" ". 당신이 runAlbum를 호출 할 때

procedure Main(); 
var 
newAlbum : album; 

begin 
newAlbum := readAlbum(newAlbum); 
printAlbum(newAlbum); 
runAlbum(); 
end; 

begin 
Main(); 
end. 

답변

4

, 당신은 그 선언에 규정 된 각 매개 변수에 대한 Prompt, minmax, 즉 (인수 일명) 값을 제공해야합니다. 현재 통화중인 빈 괄호 때문에 매개 변수 값을 증명하지 않습니다.

그래서 당신은 물론

runAlbum(newAlbum.albumName +': enter a track number to play', 0, 99); 

처럼 뭔가를 호출해야한다, 값이 0과 99 newAlbum에 사용할 수있는 최저 및 최고 번호로 교체해야합니다. 앨범 데이터에서 관련 값을 제공하는 방법을 알아낼 수 있다고 가정합니다.

+0

감사합니다. 그러나 사용자가 트랙 번호를 선택하고 터미널에서 "선택한 트랙, 그 다음에 트랙 이름", "앨범 :", 앨범 이름 다음에 "이 인쇄되어야 함을 알았습니다." 지금 노는거야! ". 그 기능을 구현하는 방법을 모르겠다. 새 함수를 만들어야 하나 프로 시저 runAlbum에이를 추가 할 수 있을까? –

+0

@ScottNeely : Btw,이 답이 도움이된다면 왼쪽 상단에있는 눈금 아이콘을 클릭하여 수락하십시오. – MartynA

관련 문제