Я, для моей жизни, не могу быть в мире со строками c и вводом / выводом.
Для моей программы я просто ввожу строку и она обрабатывается в следующем коде: (tmpstring и chуже определены)
Для моего входящего ввода я пишу в терминал: echo "test" |./program
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
Выполнение этого сразу переходит к неверному вводу без запроса дополнительного ввода.Я прочитал все о том, как вы не должны очищать стандартный ввод (и что это невозможно), но я действительно не знаю, что делать.Я явно пытался «сбросить» stdin со второй частью цикла while.Я изменил && после первого условия на ||в то время как цикл.Без изменений.В целом, как я могу запросить больше ввода после уже использованных fgets?
* edit: больше кода и разделение исходного цикла while