0

Go!のポータブルな解凍バージョンを使用しています。Scanf(および関連する関数)を使用して入出力コンソールの実装を実行しようとすると、ランタイム入力を挿入し、Enterキーを使用して検証すると、プログラムは2回または3回入力したように動作します(ループです)。明らかに(Cのように)reading-functionを呼び出した後、stdinをクリアする必要がありますが、その方法がわかりません。このばかげた基本的な問題を抱えているのは私だけのようです(なぜですか?)

この無限のループプログラムでは、フラッシュをうまく試みなかった後でも、質問が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部分は単に無効です。

また、ゴルーチン間でメモリを共有していますが、同期していません (たとえば、チャネルなど)。これにより、あらゆる種類の奇妙なことが起こる可能性があります。

コードを修正してください (できれば gofmt してください)。より具体的なアドバイスを提供できます。

于 2012-08-20T07:32:41.877 に答える