Текущий способ получения пользовательского ввода в Zig - PullRequest
2 голосов
/ 26 мая 2020

Я слежу за этим сообщением в блоге о comptime в Zig.

Следующая строка больше не компилируется в Zig 0.6.0.

const user_input = try io.readLineSlice(buf[0..]);

Ниже представлена ​​полная функция:

fn ask_user() !i64 {
    var buf: [10]u8 = undefined;
    std.debug.warn("A number please: ");
    const user_input = try io.readLineSlice(buf[0..]);
    return fmt.parseInt(i64, user_input, 10);
}

Что эквивалентно в текущей версии (получение пользовательского ввода)?

1 Ответ

3 голосов
/ 29 мая 2020

Вместо этого можно использовать метод readUntilDelimiterOrEof из stdin:

const stdin = std.io.getStdIn().inStream();
pub fn readUntilDelimiterOrEof(self: @TypeOf(stdin), buf: []u8, delimiter: u8) !?[]u8

Таким образом, код может быть:

fn ask_user() !i64 {
    const stdin = std.io.getStdIn().inStream();
    const stdout = std.io.getStdOut().outStream();

    var buf: [10]u8 = undefined;

    try stdout.print("A number please: ", .{});

    if (try stdin.readUntilDelimiterOrEof(buf[0..], '\n')) |user_input| {
        return std.fmt.parseInt(i64, user_input, 10);
    } else {
        return @as(i64, 0);
    }
}

См. Также: документация Zig 0.6.0 .

...