Turbo pascal {$I-}

Titouan -  
KX Messages postés 19031 Statut Modérateur -
Bonjour,
Je voudrait comprendre l'interet de {$I-} et {$I+}
J'ai cru comprendre que les erreurs étaient ignorées jusqu'a un appel a IOresult mon bout de prog

program test;
uses crt ,windos;
var a : integer
writeln('taper un nombre');
{$I-}
readln(a);
{$I+}
if IOresult <> 0 then
begin
writeln('Vous dever taper un nombre ');
end;
end.


En fait le pregramme ce bloque quand on met une lettre même si les erreur E S sont désactivées.

Merci

1 réponse

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    IOresult est l'abréviation de Input Output result
    {$I-} et {$I+} ne sont utiles que pour la gestion des erreurs lors de traitement de fichiers

    Pour ton problème il vaudrait mieux faire quelquechose dans ce genre là :
    function DemanderNombre:integer;
    var s:string; n,code:integer;
    begin
    write('Taper un nombre : ');
    readln(s); // ici on peut récupérer chiffres, lettres, ou mélange des deux
    val(s,n,code); // la valeur de code est égale à la position
                   // du 1er caractère qui n'est pas un chiffre
    writeln(code);
    if code=0 then result:=n // on recommence si nécessaire
              else result:=DemanderNombre;
    end;
    -1
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      Voici un petit débugage, pour corriger ce quej'ai dit précédemment...
      function DemanderNombre:integer;
      var s:string; n,code:integer;
      begin
      write('Taper un nombre : ');
      readln(s); // ici on peut récupérer chiffres, lettres, ou mélange des deux
      val(s,n,code); // la valeur de code est égale à la position
                     // du 1er caractère qui n'est pas un chiffre
      if code=0 then result:=n // on recommence si nécessaire
                else result:=DemanderNombre();
      end;
      -1