fgetsで標準入力から文字列を受け取った時、
fgetsで指定した範囲を超える部分が、2回目に呼び出したfgetsに強制的に渡されてしまいます。

文字列str1を調べて、改行コードが削られた場合に、文字が多すぎると判断することにして、
whileループでやり直すようにしてみたのですが、実行したところ、
溢れた文字列を、while文中のfgetsに渡してしまい、一回目の入力をやり直すことが出来ませんでした。

str1[]の要素数を大きくする以外に、何か対策は無いでしょうか。

char str1[8],str2[8];

printf("1回目の入力です。\n半角で7文字以上入力すると、2回目の入力が出来ません。\n");
fgets(str1,8,stdin);
printf("%s",str1);

printf("2回目の入力です。\n");
fgets(str2,8,stdin);
printf("%s",str2);