複数組のテストサンプルの読み込みの終了についてwhile(scanf()!=EOF)


いくつかのコード問題では、複数のテストサンプルを入力するように要求されます.
それはwhile(scanf()!=EOF){ }
scanf()という関数はc言語の入力関数であり,ユーザが指定したフォーマットでキーボードから指定した変数にデータを入力する.
scanf関数は正常に読み込まれたときに正常に読み込まれたデータ項目数を返し、読み込まれたときに「ファイル終了」に遭遇するとEOFを返します.
例:
scanf(%d%d,&a,&b);戻り値はint型
aのみが正常に読み込まれた場合、戻り値は1である.aとbの両方が正常に読み込まれた場合、scanfの戻り値は2である.aとbの両方が正常に読み込まれなければ、戻り値は0である.
エラーまたはend of file(ファイル終了)に遭遇した場合、戻り値はEOFです.
oj上に提出された問題について言えば、oj上のすべてのテストサンプルは正確な入力ファイルから来ており、明確な長さがある.
ファイルの読み込みが完了すると、EOFが返されます.
だからwhile(scanf()!=EOF)は,戻り値がEOFでない場合にループする.読み取りが完了するとEOFに戻り、ループも終了します.
私たちが自分でテストしたとき、入力を終了したい場合は、次のようにします.
Windowsプラットフォーム、すなわちdosコマンドラインウィンドウ.ファイル終了フラグを入力する方法はCTRL+Z.Unix,Linux,Macなどの他のプラットフォームである.入力ファイル終了フラグメソッドはCTRL+Dです.
#include
#include
using namespace std;
int main()
{
	int a,c; //a ,c scanf  
	while((c=scanf("%d",&a))!=EOF)
	{
		printf("a = %d     ",a);
		printf("c = %d   
",c); } printf("end: c = %d
",c); return 0; } : :1 :a = 1 c = 1 :2 :a = 2 c = 1 :88 :a = 88 c = 1 :^Z //ctrl+z windows :end: c = -1 // ctrl+z,scanf() -1