2017-03-14 7 views
0

Pour la première fois ici, je vais essayer de le faire correctement.Erreur d'exécution Pascal 106 sur les devoirs

Je travaille sur mon premier programme qui imprime les pourcentages pour une classe d'élèves ayant un ID, le prénom & et un score d'affectation qui doit être converti. J'ai été capable de le compiler avec seulement deux avertissements sur assignment_score et assignment_percentage étant non initialisés.

Je reçois l'erreur d'exécution 106 (qui est quand une valeur non numérique est lue où une valeur numérique est attendue) dans mes read_record, initialize, et modules principaux (je pense que c'est le terme).

Il a à voir avec l'espacement dans le fichier de données, mais peut-être je l'ai fait quelque chose de mal dans le code, comme ceci est mon premier programme que je suis à la recherche de toute aide possible.

Lire_enregistrement:

begin 
    if EoF(FileIn) then 
    more_students := False 
    else 
    readln(FileIn,student_id,last_name,first_name,assignment_score) 
end; {read_record} 

Initialiser:

Procedure initialize; 
begin 
    more_students:= True; 

    {Assigns files to input and output and rewrites them for the code } 
    Assign(FileIn, 'prg2a-150.dat'); 
    Reset(FileIn); 
    Assign(Fileout, 'Prog2.txt'); 
    Rewrite(fileout); 

    READ_RECORD; 
    Print_Header 
end; { initialize } 

Mon processus & principal (je reçois une erreur à la ligne 100 quand je l'appelle pour le processus à utiliser qui est l'endroit où j'écris mon FileOut)

procedure process; 
begin 
    {Line check for print header} 

    if line_count > 57 then 
    print_header; 

    Inc(line_count); 

    { Converts score to percentage } 
    compute_grade; 

    {Report Percentage} 
    writeln(FileOut, student_id, space(2), last_name, space(1), first_name, space(2), assignment_percentage:5:1); 

    { Next Runner Data } 
    read_record 
end; { process } 


{WRAP UP -- No summary so just the files are being closed } 
procedure wrapup; 
begin 
    close(FileOut); 
    close(FileIn) 
end; { wrapup } 

begin { main } 
    initialize; 

    while more_students do 
    process; 

    wrapup 
end. 

Enfin, voici mon fichier de données:

032919631 BACH    AMANDA 14.1 

327777582 GUNDERSON   EMILY  9.9 

188941863 DARLING    CHRIS  14.7 

396501493 JACKSON    GUY  2.1 

552753315 MILKOVICH   LAURA 21.0 

553962171 ZADINS    WALLACE 28.9 

989570643 KLIPP    JOAN  33.3 

468497243 CARPENTER   BETTYANNE 6.0 

112324230 RIKER    NANCY  17.1 

720789066 UTHE    SHARON 12.7 

878468839 NULL    LIVAK  0.0 

606537736 ZUCKERMAN   YVONNE  1.0 

996498720 KINGSLIGHT   JERRIE 14.5 

453310627 GAUTHIER   DONALD  7.8 

289324008 HIRSH    GAYLENE 32.3 

361582495 KELLY    JEAN 0.1 

441892834 FACTOR    DANI  15.8 

255715006 MARKS    KIMBERLEE 8.9 

535282507 MORROW    LEONARD 29.8 

566318464 COSGROVE   CAROL  15.8 

158778873 MUDD    LES 29.1 

574450163 TIMMERMAN   ROY  2.9 

032731233 MUIZNIECE   LESLIE 14.3 

832142931 HARMAN    FRITZ  34.5 
+0

Quel est votre « ligne 100 » exactement où vous obtenez l'erreur? – MartynA

+0

ligne 99: tandis que more_students font ligne 100: processus; –

+0

Cela arrive-t-il à la première itération ou à la dernière? Pourquoi ne pas activer le débogage et passer par les procédures? – juus

Répondre

0

Si votre fichier d'entrée a vraiment une ligne vide entre toutes les deux lignes de données, ReadLn jetteront une erreur dès qu'il lit une ligne vide, parce que vous l'avez dit d'attendre une valeur numérique.