对于我的一生,我无法与 c 字符串和输入/输出和平相处。
对于我的程序,我只需输入一个字符串,然后在以下代码中对其进行处理:(tmpstring 和 ch 已经定义)
对于我的输入,我在终端中写:echo "test" | 。/程序
int main(int argc, char *argv[]) {
char tmpstring[2048];
int ch;
int r;
int c;
fgets(tmpstring, sizeof tmpstring, stdin);
while((ch = fgetc(stdin))!= EOF && ch != '\n');
tmpstring[strlen(tmpstring)-1]='\0';
strncpy(opponent, tmpstring+1, strlen(tmpstring+1));
move();
move() 内部;
char buffer[2048]={0};
int r, c;
r=0; c=0;
printf("Your move (row column):");
if((fgets(buffer, sizeof buffer, stdin)==NULL) || ((sscanf(buffer,"%d %d", &r, &c))!=2)){
printf("Invalid input. Please insert two numbers separated by whitespace.\n");
exit(1);
}
//continues
执行此操作直接进入无效输入,而不要求更多输入。我已经阅读了所有关于你不应该清除标准输入的内容(这是不可能的),但我真的不知道该怎么做。我显然试图用 while 循环的第二部分“转储”标准输入。我已将第一个条件后的 && 更改为 || 在while循环中。不用找了。总的来说,在已经使用过 fgets 之后,我怎么能要求更多的输入呢?
*编辑:更多代码并分离原始的while循环