Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1

    [Pascal]Salta il read()

    Ho fatto un semplice programma:

    Program altezze;
    uses crt;
    var n,i:integer;
    bassi:real;
    nome:array [1..300] of string;
    altezza:array[1..300] of real;
    procedure nstud;
    begin
    Writeln('Di quanti studenti vuoi inserire l''altezza?');
    read(n);
    end;
    procedure dati;
    begin
    for i:= 1 to n do
    begin
    Writeln('Come si chima il ',i,' studente?');
    Readln(nome[i]);
    Writeln('Quanto e'' alto ',nome[i],'?');
    read(altezza[i]);
    end;
    end;
    Procedure piubassi;
    begin
    writeln('Di che altezza vuoi sapere i più bassi?');
    read(bassi);
    writeln('I più bassi di ',bassi,' sono:');
    for i:= 1 to n do
    if altezza[i] < bassi then writeln(nome[i],':',altezza[i]);
    repeat until keypressed
    end;
    begin
    nstud;
    dati;
    piubassi;
    end.

    E' giusta sintatticamente ma quando lo si esegue nel punto:
    ...
    procedure dati;
    begin
    for i:= 1 to n do
    begin
    Writeln('Come si chima il ',i,' studente?');
    Readln(nome[i]);
    Writeln('Quanto e'' alto ',nome[i],'?');
    read(altezza[i]);
    end;
    end;
    ...

    Mi salta la lettura di (nome[i])

    cosa ho sbagliato?

    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    127

    Re: [Pascal]Salta il read()

    prova a fare così :
    Writeln('Come si chima il ',i,' studente?');
    read(nome[i]);

    forse il readln ti fa saltare la lettura.

    ciao

  3. #3
    Funziona perfettamente . Che compilatore usi ? :master:

  4. #4
    Funziona perfettamente . Che compilatore usi ?
    Uso il Dev-Pascal 1.9.2 (Freepascal)

    prova a fare così :
    Writeln('Come si chima il ',i,' studente?');
    read(nome[i]);

    forse il readln ti fa saltare la lettura.

    ciao
    Ho provato ma il risultato è lo stesso
    rimetto il codice:

    Program altezze;
    uses crt;
    var n,i:integer;
    bassi:real;
    nome:array [1..300] of string;
    altezza:array[1..300] of real;
    procedure nstud;
    begin
    Writeln('Di quanti studenti vuoi inserire l''altezza?');
    read(n);
    end;
    procedure dati;
    begin
    for i:= 1 to n do
    begin
    Writeln('Come si chima il ',i,' studente?');
    Readln(nome[i]);
    Writeln('Quanto e'' alto ',nome[i],'?');
    read(altezza[i]);
    end;
    end;
    Procedure piubassi;
    begin
    writeln('Di che altezza vuoi sapere i più bassi?');
    read(bassi);
    writeln('I più bassi di ',bassi,' sono:');
    for i:= 1 to n do
    if altezza[i] < bassi then writeln(nome[i],': ',altezza[i]);
    repeat until keypressed
    end;
    begin
    nstud;
    dati;
    piubassi;
    end.
    Possibile che abbia scoperto un bug nella versione del mio compilatore?

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    127
    forse il problema è legato ad un mancato svuotamento del buffer...
    quando leggi la stringa read(nome[i]) nel tuo array viene memorizzato l'ultimo carattere digitato,
    esattamente "invio" dato che hai usato writeln ...
    prova a mettere un semplice write prima della lettura del nome, xò dubito che funzioni, ci vorrebbe prima della lettura un comando per svuotare il buffer tipo fflush del c ma purtroppo non conosco bene il pascal.


  6. #6
    Mi fanno venire il nervoso questi problemi stupidi avrei preferito un errore di sintassi

  7. #7
    prova a mettere un semplice write prima della lettura del nome
    Grazie ma non funziona lo stesso

    Riposto il codice nella speranza che qualcuno riesca a darmi una mano

    codice:
    Program altezze;
    uses crt;
    var n,i:integer;
        bassi:real;
        nome:array [1..300] of string;
        altezza:array[1..300] of real;
     procedure nstud;
     begin
     Writeln('Di quanti studenti vuoi inserire l''altezza?');
     read(n);
     end;
     procedure dati;
     begin
     for i:= 1 to n do
     begin
     Writeln('Come si chima il ',i,' studente?');
     Readln(nome[i]);
     Writeln('Quanto e'' alto ',nome[i],'?');
     read(altezza[i]);
     end;
     end;
     Procedure piubassi;
     begin
     writeln('Di che altezza vuoi sapere i più bassi?');
     read(bassi);
     writeln('I più bassi di ',bassi,' sono:');
     for i:= 1 to n do
     if altezza[i] < bassi then writeln(nome[i],': ',altezza[i]);
     repeat until keypressed
     end;
     begin
     nstud;
     dati;
     piubassi;
     end.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    127
    vediamo se ci ho azzeccato con il fatto del buffer, sostituisci l'array di stringhe con un array di interi vedi se legge...se è così bisogna trovare una funzione che svuoti il buffer in pascal...

  9. #9
    [quote] sostituisci l'array di stringhe con un array di interi vedi se legge[\quote]

    Funziona anche se non ho ben capito il problema principale (è il primo programma che faccio utilizzando gli array)

    Dici che c'è una maniera per magari ritrasformarli in String?

  10. #10
    Prova a sostituire l'istruzione
    nome:array [1..300] of string;
    con
    nome:array [1..300] of string[20];
    Fammi sapere . Ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.