私はソフトウェア エンジニアリングの学生で、次の学期に向けて改善するためにクリスマス休暇を取っています。さまざまなコンソール アプリケーションを作成して練習しています。しかし、問題が発生しました。ユーザーから整数入力を取得する必要があります。私はfgets
文字列を取得するためにstdin
使用してから整数を取得するために使用sscanf
しました(これは正常に機能しました)が、ユーザーがバッファサイズを超えて入力すると、末尾の文字がストリームに残ります(改行を含めると、次の呼び出しがスキップされますfgets
)。私が周りを見回したところ、while(getchar() != '\n');
消費される改行文字がない場合、入力の不要なスキャンが行われるため、ほとんどの人がそれを示唆しているように見えますが、問題が発生することがわかりました。
例:
int ch;
char* buffer = (char*)malloc(BUFSIZ*sizeof(char));
while((ch = getchar()) != '\n' && ch != EOF);
fgets(buffer,BUFSIZ*sizeof(char),stdin);
バッファーが小さすぎず、ストリームに末尾の文字が残っていない場合は、不必要なgetchar()
原因となる入力があります。
出力:
A
A
You typed A
Intended Output:
A
You typed A
これが十分に明確になったことを願っています。助けていただければ幸いです。