请求输入时D中的无限循环或溢出缓冲区

请求输入时D中的无限循环或溢出缓冲区,d,D,因此,我一直在尝试在D中获取输入,当我检查以确保输入正确时,我要么以无限循环结束,要么输入缓冲区溢出。 当前,如果我尝试以字符数组的形式读取输入,我必须停止使用ctrl+d接收输入,然后它会无限循环,如果我尝试只接收一个字符,如果键入了多个字符,下次请求输入时,它将自动使用。我从一个较大的函数中取出了这少量代码,因为这是我将问题隔离到的地方。Changescanf(“%s”和&data)到scanf(“%s\n”、&data) 或者,您可以使用以下命令读取单个字符:scanf(“%c”,&gu

因此,我一直在尝试在D中获取输入,当我检查以确保输入正确时,我要么以无限循环结束,要么输入缓冲区溢出。

当前,如果我尝试以字符数组的形式读取输入,我必须停止使用ctrl+d接收输入,然后它会无限循环,如果我尝试只接收一个字符,如果键入了多个字符,下次请求输入时,它将自动使用。我从一个较大的函数中取出了这少量代码,因为这是我将问题隔离到的地方。

Change
scanf(“%s”和&data)
scanf(“%s\n”、&data)


或者,您可以使用以下命令读取单个字符:
scanf(“%c”,&gustiy)

我遇到的使用
%c
的问题是,后来我要求分别背靠背输入3个字符,如果您输入
%c
,有人输入
abc
,接下来的两个输入将自动使用b和c,但是
\n
有效,非常感谢!
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);
}