我正在使用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();
}
答案 0 :(得分:1)
我无法编译代码。真正有问题的一行是fmt.readByte(i, var j)
行。没有fmt.readByte
功能,如果有,则不会导出。 var j
部分无效。
此外,您在goroutine之间共享内存但不以任何方式同步(例如,频道)。这可能会导致各种奇怪的事情发生。
请修改你的代码(最好是gofmt),我可以给你更具体的建议。