2016-12-08 9 views
2

Dで入力を取得しようとしていて、入力が正しいことを確認すると、無限ループまたは入力バッファ溢れる 入力を求めるときにDの無限ループまたはオーバーフローバッファ

import std.stdio; 
import std.string; 
void main(){ 

    char[] data; 

    writeln("Hey Player ",1,". Would you like to make a guess?\n Type 'y' to guess or 'n' to continue "); 
    write("> "); 
    readf(" %s", &data); 
    char guessY = data[0]; 

    while(guessY != 'y' && guessY != 'Y' && guessY != 'n' && guessY != 'N') 
    { 
    writeln(guessY, " ",data); 
    writeln(""); 
    writeln("Hey Player ",1," enter the correct input please.\n Type 'y' to guess or 'n' to continue "); 
    write("> "); 
    readf(" %s", &data); 
    guessY = data[0]; 
    //fflush(&guessY); 
    } 
    writeln(guessY, " ",data); 
} 

そして、私がしようとすると、文字列として入力を読めば、私は試してみて、ちょうど単一の文字を受け取る場合ならば、現在、私は、無限ループをCtrl + Dキーで入力が供給を停止し、それする必要があります複数の文字が入力されたときは、次に入力を求めるときに自動的に使用されます。私はこの小さな量のコードをより大きな関数から取り除きました。なぜなら、これが問題を分離していたからです。

答えて

1

scanf(" %s", &data);からscanf(" %s\n", &data);に変更してください。

また、あなただけで単一の文字を読むことができる:後である私がバックアップするために別々に戻って3つの文字の入力を要求し、あなたが入れた場合は、 `私はに走っ%のC 'を使用してscanf(" %c", &guessY);

+0

問題を'%c'と誰かが' abc'を入力すると、次の2つの入力は自動的にbとcを使用します '\ n'はうまくいきました。 –

関連する問題