0

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

在这个无休止的循环程序中,即使在我糟糕的冲洗尝试之后,这个问题也会被问和回答 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();



}
4

1 回答 1

1

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

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

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

于 2012-08-20T07:32:41.877 回答