当前在 Zig 中获取用户输入的方法

use*_*861 4 zig

我正在关注Zig 中关于“comptime”的这篇博文

以下行不再在 Zig 中编译0.6.0

const user_input = try io.readLineSlice(buf[0..]);
Run Code Online (Sandbox Code Playgroud)

下面是完整的功能:

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);
}
Run Code Online (Sandbox Code Playgroud)

当前版本(获取用户输入)中的等效项是什么?

Cri*_*ino 10

您可以使用该方法readUntilDelimiterOrEofstdin替代:

const stdin = std.io.getStdIn().reader();
Run Code Online (Sandbox Code Playgroud)
pub fn readUntilDelimiterOrEof(self: @TypeOf(stdin), buf: []u8, delimiter: u8) !?[]u8
Run Code Online (Sandbox Code Playgroud)

所以,代码可以是:

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

    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);
    }
}
Run Code Online (Sandbox Code Playgroud)

另请参阅:Zig 0.7.0 文档