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

Infinite loop or overflowing buffer in D when asking for input

所以我一直试图在 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 接收输入,然后无限循环,如果我尝试只接收一个字符,如果多个字符字符已键入,下次您要求输入时将自动使用它。我从一个更大的函数中取出了这么少量的代码,因为这是我将问题隔离到的地方。

scanf(" %s", &data); 更改为 scanf(" %s\n", &data);

或者,您可以只读取一个字符:scanf(" %c", &guessY);