Не работает ввод

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Не работает ввод

Сообщение vladimashev » 16.12.2018 18:34:07

Программа почему-то игнорирует команду readln(name); в 80 строчке (выделено красным) и просто не запрашивает ввод name. Free Pascal IDE version 1.0.12, compiler version 3.0.4, windows 10.

Код: Выделить всё
type
    p = ^element;
    element = record
        r: integer; {row}
        c: integer; {coloumn}
        number: integer;
        next: p;
    end;
    k = set of byte;
var
    u, s, d: p;
    rows, columns, count, i, j, temp: integer;
    degree: real;
    choice: integer;
    m: array [1..1000] of integer;
    name: string;
    f: text;
    numbers: k;
    flag: integer;
begin
    {Блок ввода данных}


    writeln('Input 1 to create matrix of ones');
    writeln('Input 2 to create matrix with random numbers');
    writeln('Input 3 to create identity matrix');
    readln(choice);
    if (ioresult <> 0) or ((choice <> 1) and (choice <> 2) and (choice <> 3)) then
    begin
        writeln('Uncorrect input');
        readln();
        readln();
        exit;
    end;
    if choice = 3 then
    begin
        writeln('Input the number of rows of the matrix:');
        readln(rows);
        if ioresult <> 0 then
        begin
            writeln('Uncorrect input');
            readln();
            readln();
            exit;
        end;
    end
    else
    begin
        writeln('Input the number of rows of the matrix:');
        readln(rows);
        if ioresult <> 0 then
        begin
            writeln('Uncorrect input');
            readln();
            readln();
            exit;
        end;
        writeln('Input the number of columns of the matrix:');
        readln(columns);
        if ioresult <> 0 then
        begin
            writeln('Uncorrect input');
            readln();
            readln();
            exit;
        end;
        writeln('Input the degree of sparsity:');

        readln(degree);
        if (ioresult <> 0) or (degree > 1) or (degree <= 0) then
        begin
            writeln('Uncorrect input');
            readln();
            readln();
            exit;
        end;
    end;
    writeln('Specify the name of file to record matrix:');

readln(name);
Код: Выделить всё
   Assign(f, name);
    Rewrite(f);

    writeln('Do you want matrix to be written in tabular form? (yes - 1/no - 0)');
    readln(flag);
    if (ioresult <> 0) or ((flag <> 1) and (flag <> 0)) then
        begin
            writeln('Uncorrect input');
            readln();
            readln();
            exit;
        end;

    count := round(degree * columns);

    {Блок варианта 1}
    if choice = 1 then
    begin
        for i := 1 to columns do
            m[i] := 0;
        new(s);
        new(d);
        s := d;
        u := d;
        randomize;

        for i := 1 to rows do begin
            numbers := [];
            for j := 1 to count do begin
                temp := random(columns) + 1;
                while temp in numbers do
                    temp := random(columns) + 1;
                d^.c := temp;
                d^.r := i;
                d^.number := 1;
                numbers := numbers + [temp];
                new(d^.next);
                d := d^.next;
            end;
        end;
        write(f, 'matrix');
        writeln(f);
        for i := 1 to rows * count do
        begin
            writeln(f, s^.r, ' ', s^.c, ' ', s^.number);
            s := s^.next;
        end;
        writeln(f);

        if flag = 1 then
        for i := 1 to rows do
        begin
            for j := 1 to columns do m[j] := 0;
            repeat
                m[u^.c] := u^.number;
                u := u^.next;
            until (u^.r <> i) or (u = nil);
            for j := 1 to columns do write(f, m[j]:5);
            writeln(f);
        end;
        close(f);
    end
    {Блок варианта 2}
    else if choice = 2 then
    begin
        for i := 1 to columns do
        m[i] := 0;
        new(s);
        new(d);
        s := d;
        u := d;
        randomize;

        for i := 1 to rows do begin
            numbers := [];
            for j := 1 to count do begin
                temp := random(columns) + 1;
                while temp in numbers do
                    temp := random(columns) + 1;
                d^.c := temp;
                d^.r := i;
                d^.number := random(1000) + 1;
                numbers := numbers + [temp];
                new(d^.next);
                d := d^.next;
            end;
        end;
        write(f, 'matrix');
        writeln(f);
        for i := 1 to rows * count do
        begin
            writeln(f, s^.r, ' ', s^.c, ' ', s^.number);
            s := s^.next;
        end;
        writeln(f);

        if flag = 1 then
        for i := 1 to rows do
        begin
            for j := 1 to columns do m[j] := 0;
            repeat
                m[u^.c] := u^.number;
                u := u^.next;
            until (u^.r <> i) or (u = nil);
            for j := 1 to columns do write(f, m[j]:5);
            writeln(f);
        end;
        close(f);
    end
    {Блок варианта 3}
    else if choice = 3 then
    begin
        for i := 1 to rows do m[i] := 0;
        new(s);
        new(d);
        s := d;
        u := d;

        for i := 1 to rows do
        begin
            d^.c := i;
            d^.r := i;
            d^.number := 1;
            new(d^.next);
            d := d^.next;
        end;
        write(f, 'matrix');
        writeln(f);
        for i := 1 to rows do
        begin
            writeln(f, s^.r, ' ', s^.c, ' ', s^.number);
            s := s^.next;
        end;
        writeln(f);

        if flag = 1 then
        for i := 1 to rows do
        begin
            for j := 1 to rows do m[j] := 0;
            repeat
                m[u^.c] := u^.number;
                u := u^.next;
            until (u^.r <> i) or (u = nil);
            for j := 1 to rows do write(f, m[j]:5);
            writeln(f);
        end;
        close(f);
    end;
end.
vladimashev
незнакомец
 
Сообщения: 3
Зарегистрирован: 16.12.2018 18:08:31

Re: Не работает ввод

Сообщение Дож » 16.12.2018 19:23:48

Дайте угадаю, запускаете программу из FP IDE? Что будет, если запустить её из cmd.exe?
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 812
Зарегистрирован: 12.10.2008 16:14:47


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru