请求输入时 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);
所以我一直试图在 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);