1

プログラム:

  program s;

  type info = record
                    name, surname: string;
                    min, sek: integer;
              end;

  type arrays = array[1..50] of info;

  var c, b: text;
  A: arrays;
  gr_sk,
  grup_dal: integer;

  begin

  assign(c, 'info.txt'); reset(c);
  read(c, gr_sk);
  read(c, grup_dal);
  id := 1;

  read(c, A[id].name);
  read(c, A[id].sek);

  close(c);

end.

info.txt ファイル:

3
4
yhgf
4

それのどこが悪いのか教えてください。19行目の数値形式が悪いと言っています。

に変更min, sek: integer;するとmin, sek: string;、動作します。私が理解しているように、文字列のように数値を読み取ります。なんていうか、今まで経験したことがありません。神よ、私は自分自身を撃ちます。

4

3 に答える 3

0

私は古いPascalを使用するのに何年もかかります(現在はDelphiを使用しています) c。変数を間違って使用していると思います。とにかく、Pascalでは、file変数を宣言し、それらにレコードタイプを関連付けることができます。

例:

  type info ...

  var f: file info; { <-- here }
  ...

  begin
     assign(f, 'info.txt');
     reset(f);
     id := 1;
     read(f, A[id]);
     close(f);
  { now A[1] should contain file data }
  ...
于 2010-05-16T17:12:07.247 に答える
0

これは私が思うことです

'yhgf'を整数(gr_sk)に読み取ろうとしているため、読み取りを読み取ると、'yhgf'を整数に変換できないため、エラーがスローされます。

あなたは何をするべきか?

そうですね、文字列に読み込んで、数値であることを確認してから、整数に変換できると思います。率直に言って、私はそれを行うためのパスカルの方法を覚えていません。グーグルした後、valプロシージャを見つけました。

Valは、文字列Sourceの文字で表される整数または実数を変換し、xに配置します。

文字列関数/プロシージャに関するいくつかのヒント:

于 2010-05-16T16:56:23.863 に答える
0

変化する

read(c, A[id].name);

readln(c, A[id].name);

とにかく、その方向で問題を検索します。つまり、行区切り記号を読み取らないことです。(CR と LF)

疑わしい場合は、read(f,) を実行し、読み取った文字のいくつかの ORD() を画面に書き込みます。

于 2010-05-17T11:22:36.893 に答える