Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用Rust连续多次读取stdin错误

用Rust连续多次读取stdin错误
EN

Stack Overflow用户
提问于 2022-07-28 09:44:19
回答 1查看 124关注 0票数 0

我刚刚开始学习锈,我正在尝试创造一个猜谜游戏。但是,我始终遇到一个错误,从stdin中读取的数据也捕获了stdin之前的所有输入。我正在Windows 10上运行这个程序。

我真正的猜游戏程序:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
use std::{io};

use rand::Rng;

fn main() {
    let mut rng = rand::thread_rng();
    let x: u8 = rng.gen_range(0..=10);

    let mut end_game: bool = false;

    println!("Welcome to the number guessing game");
    println!("After each guess, I'll let you know if you're too high or too low");

    let mut guess: String = String::new();
    let mut guess_int: u8;
    while !end_game {
        println!("Guess: ");
        io::stdin().read_line(&mut guess).expect("Failed to read input");
        println!("You guessed {guess}");

        guess_int = guess.trim().parse().unwrap();

        if guess_int == x {
            end_game = true;
        } else if guess_int > x {
            println!("{} is too high!", guess_int);
        } else if guess_int < x {
            println!("{} is too low", guess_int);
        }
    }

    println!("You got it!");

}

这是我写的另一个生锈文件,它只是为了确保我认为正在发生的问题正在发生。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
use std::io;

fn main() {
    let mut input: String = String::new();

    println!("what is your name?");
    io::stdin().read_line(&mut input).expect("!!");

    println!("Input1: {input}");

    println!("age?");
    io::stdin().read_line(&mut input).expect("!!");

    println!("Input2: {input}");
}

这给了我这个:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
what is your name?
Input1: Joe

age?
420
Input2: Jack
420

有什么办法可以冲破水声之类的吗?提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-28 10:25:11

感谢“PitaJ”和“Masklinn”,他们都提供了答案。

问题是std::io::stdin().read_line(...)附加到通过引用传递给函数的字符串。因此,在重用字符串以获得输入之前,必须清空传入的字符串。这可以用String::new()StringNameHere.clear()来完成。

我的工作代码最后看起来是这样的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
use std::{io};

use rand::Rng;

fn main() {
    // println!("Hello, world! : ");

    let mut rng = rand::thread_rng();
    let x: u8 = rng.gen_range(0..=20);
    let mut num_guesses: u8 = 0;

    let mut end_game: bool = false;

    println!("Welcome to the number guessing game");
    println!("After each guess, I'll let you know if you're too high or too low");

    let mut guess: String = String::new();
    let mut guess_int: u8;
    while !end_game {
        println!("Guess: ");
        io::stdin().read_line(&mut guess).expect("Failed to read input");

        guess_int = guess.trim().parse().unwrap();
        guess.clear();  //guess = String::new() works too, but I think this method is easier to understand
        num_guesses += 1;

        if guess_int == x {
            end_game = true;
        } else if guess_int > x {
            println!("{} is too high!", guess_int);
        } else if guess_int < x {
            println!("{} is too low", guess_int);
        }
    }

    println!("You got it! You guessed the magic number ({}) in {} guesses", x, num_guesses);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73157139

复制
相关文章
Android连续点击多次事件的实现
System提供的一个静态方法arraycopy(),我们可以使用它来实现数组之间的复制。
用户1289394
2021/07/30
1.3K0
C语言缓冲区之 gets(str);fflush(stdin); rewind(stdin);setbuf(stdin, NULL);
清空键盘缓冲区很多种方法,如用fflush(stdin); rewind(stdin);setbuf(stdin, NULL);前两者仅对windows有用,最后一个则对Linux系统也适用。那么为什么需要清空键盘缓冲区呢? 以下几个实例:
瑞新
2020/07/07
2.8K0
iOS 连续多次present 之后,想回到最初的viewController
// The view controller that was presented by this view controller or its nearest ancestor.
星宇大前端
2019/01/15
1.7K0
猜数游戏-Rust版
fliter
2023/09/05
1530
猜数游戏-Rust版
【Rust blog】细说Rust错误处理
这篇文章写得比较长,全文读完大约需要15-20min,如果对Rust的错误处理不清楚或还有些许模糊的同学,请静下心来细细阅读。当读完该篇文章后,可以说对Rust的错误处理可以做到掌握自如。
MikeLoveRust
2020/03/03
3.5K0
Rust错误处理
在很多情况下,Rust 要求你承认出错的可能性,并在编译代码之前就采取行动。这些要求使得程序更为健壮,它们确保了你会在将代码部署到生产环境之前就发现错误并正确地处理它们!Rust 将错误组合成两个主要类别:「可恢复错误」(recoverable)和「不可恢复错误」(unrecoverable)。
hotarugali
2022/03/18
7230
Rust错误处理
不可恢复错误通常是非常严重的,例如:程序一开始读取配置文件失败或者连接数据库失败,诸如此类导致程序运行发生致命错误的,可以使用不可恢复错误。在rust中,触发不可恢复错误使用panic即可。 触发panic可以分为被动触发和主动调用两种方式。
zy010101
2023/03/27
7130
【Rust 基础篇】Rust 错误处理详解
在软件开发中,错误处理是一项重要的任务。Rust 提供了一套强大的错误处理机制,使开发者能够有效地处理和管理错误。本篇博客将详细解析 Rust 中的错误处理机制,包括错误类型、错误传播、Result 类型以及错误处理的最佳实践。
繁依Fanyi
2023/10/12
4640
【Rust日报】2020-08-10:在 Rust 中存储连续数据
更多详细内容 https://github.com/paulkernfeld/contiguous-data-in-rust
MikeLoveRust
2020/08/17
7410
Python中标准输入(stdin)、标准输出(stdout)、标准错误(stdout)的用法
Python 3.x 中 input() 函数可以实现提示输入,python 2.x 中要使用 raw_input(),例如:
Python学习者
2023/08/01
4310
rust的错误处理
错误处理 返回代码 异常处理 可恢复的异常 Optionpub enum Option<T>{ None, Some(T), }可以Unwrapping在Option上解压pub enum Result<T, E> { Ok(T), Err(E), } Result Option和resutl 可以组合 通过ok_or和ok转换 及早返回?:任何一个失败就整体失败了 不可恢复异常painc catch_unwind处理故障,只是停止展开栈,不能阻止程序终止运行的故障 自定义错
李子健
2022/05/09
3400
stdin and stdout which it's ?
最近写了几个C函数,来处理项目中一个Desktop跨应用的进程通信,被32-bit,LE(BE)折磨了很久,stdin and stdout 看起来是一个很简单的标准输入输出,但是处理的过程中,却遇到了很大的障碍,因为历史问题,一个bytes的长度,需要将消息的位置移动4个byte存储消息的长度,先发送给对方,告诉对方我即将发送一个多少长度的byte,反之解析也是亦然。
icepy
2019/06/24
9890
stdin and stdout which it's ?
Rust 中的错误处理 - Rust 实践指南
对于程序员来说,错误处理的重要性是不言而喻的,贯穿于代码编写、开发、调试,以及交付运行的全过程中。对于此等重要的工作,Rust 生态中特别有一个 crate error-chain 对错误处理在 Rust 标准库之上给予了支持。
niqin.com
2022/06/30
8880
30.Rust-错误处理
Rust 语言也有错误这个概念,而且把错误分为两大类:可恢复 和 不可恢复,相当于其它语言的 异常 和 错误。
面向加薪学习
2022/06/30
3680
用Rust实现RDMA
RDMA是常用于高性能计算(HPC)领域的高速网络,在存储网络等专用场景也有广泛的用途。RDMA最大的特点是通过软硬件配合,在网络传输数据的时候,完全不需要CPU/内核参与,从而实现高性能的传输网络。最早RDMA要求使用InfiniBand (IB)网络,采用专门的IB网卡和IB交换机。现在RDMA也可以采用以太网交换机,但是还需要专用的IB网卡。虽然也有基于以太网卡用软件实现RDMA的方案,但是这种方案没有性能优势。
王璞
2021/04/06
2.1K0
【Rust每周一库】csv - 文件读写库
示范如何从stdin读取CSV数据并且将数据映射到定制结构体。结构体中的成员名称会默认与CSV数据中的表头相对应。
MikeLoveRust
2020/02/20
1.3K0
tealeg/xlsx遇到读取空表格错误
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/details/50830451
hotqin888
2018/09/11
1.8K0
tealeg/xlsx遇到读取空表格错误
Linux gzip: stdin: not in gzip format
在解压tar.gz文件的时候报错 tar -zxvf otp_src_18.3.tar.gz gzip: stdin: not in gzip format tar: Child returned
Arebirth
2020/06/19
3.1K0
初识Rust
虽然Rust工作上不一定用到,目前很难靠这个吃饭。但因为下面几个原因,有必要了解下Rust:
后端云
2022/11/25
5320
点击加载更多

相似问题

从stdin连续读取

119

Rust:从stdin读取和映射行,并处理不同的错误类型

110

用Python读取异步stdin

11

Python连续地从其他源读取stdin

17

写入子进程‘stdin in Rust?

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文