私は一生、c 文字列と入力/出力に満足することはできません。
私のプログラムでは、単純に文字列を入力すると、次のコードで処理されます: (tmpstring と ch は既に定義されています)
着信入力については、ターミナルに次のように書き込みます。。/プログラム
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 ループの 2 番目の部分で stdin を「ダンプ」しようとしたことは明らかです。最初の条件の後の && を || に変更しました。while ループで。変化なし。全体として、すでに fgets を使用した後、さらに入力を求めるにはどうすればよいですか?
*編集: コードを追加し、元の while ループを分離しました