2017-09-21 12 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」で起こっています。

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

あなたがrunAlbumを呼び出すときは、その宣言で指定された各パラメータの値(引数別名)、すなわちPromptminmaxを提供する必要があります。現時点では、コールの空のカッコがあるため、パラメータ値は証明されていません。

だから、もちろん

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

ようなもので、それを呼び出すべきである、値0と99はnewAlbumために利用可能な最低と最高の数字に置き換える必要があります。私はあなたがアルバムデータから関連する値をどのように供給するかを考え出すことができると思います。

+0

ありがとうございました! しかし、私は、ユーザーがトラック番号を選択しなければならないことを認識した後、端末は "選択したトラック"、トラック名の後に "アルバムから:"、アルバム名の順に "再生中!"。 私はそれを実装する方法を知らないので、新しい関数を作るべきですか、それともプロシージャrunAlbumに追加することはできますか? –

+0

@ScottNeely:Btw、この回答が役に立った場合は、左上のチェックアイコンをクリックして、それを受け入れてください。 – MartynA

関連する問題