使用Scanf + input + enter进行stdin的双输入,如何刷新?

时间:2012-08-20 07:25:57

标签: io go stdin

我正在使用Go的便携式解压缩版本!每当我尝试使用Scanf(以及相关函数)执行输入输出控制台实现时,插入运行时输入并使用enter结果验证程序行为(它是一个循环),就像我输入两次或三次一样。显然(比如在C中)stdin需要在调用read-function后清除,但是我找不到怎么做。我似乎是唯一一个有这个愚蠢的基本问题的人(为什么?)

在这个无休止的循环程序中,即使在我的冲洗尝试不佳之后,问题也会被问及并回答3次:

package main
import "fmt"
import "time"
var globalBad, globalGood int
func Thread1() {
    var i int
    var t string
    for {
    fmt.Println("Please give I")
    fmt.Scanf("%d", &i)
    fmt.Println(t);
    flush();
    globalBad = i;
    //fmt.Println(i);
    time.Sleep(1000 * time.Millisecond);
    fmt.Println("Meet globalGood %f", globalGood )
    if i == 12 {return};
    }

}

func Endless(){
    var LocalBad int ;

for{
    if LocalBad != globalBad{
        LocalBad = globalBad;
        globalGood = globalBad*2;
        }
    time.Sleep(1000 * time.Millisecond);
}
}

func flush(){
    var i byte
    for i > 0{
    fmt.readByte(i, var j);
    }
    fmt.Println("Done");
}

func main() {
    globalBad = 0;
    go Thread1();
    Endless();



}

1 个答案:

答案 0 :(得分:1)

我无法编译代码。真正有问题的一行是fmt.readByte(i, var j)行。没有fmt.readByte功能,如果有,则不会导出。 var j部分无效。

此外,您在goroutine之间共享内存但不以任何方式同步(例如,频道)。这可能会导致各种奇怪的事情发生。

请修改你的代码(最好是gofmt),我可以给你更具体的建议。