关于while(!EOF)的问题
我从stdin
读取值,我想继续阅读文件,直到我完成阅读,所以我正在使用
while(!EOF){ scanf(...) }
但是,代码片段似乎没有做任何事情,
while(!EOF){ scanf("%d %d %d %d", &imageWidth, &imageHeight, &safeRegionStart, &safeRegionWidth); printf("---imageWidth=%d imageHeight=%d safeRegionStart=%d safeRegionWidth=%d---\n", imageWidth, imageHeight, safeRegionStart, safeRegionWidth); totalP = imageWidth * imageHeight ; totalSafeP = imageHeight * safeRegionWidth; printf("---total # of pixels: %d Total # of safe Pixels: %d---\n\n", totalP, totalSafeP); i=1; while(i!=totalP) { i++; scanf("%d", &pixel); printf("\nValue of pixel %d", pixel); }//End for scanning all pixels*/ }//while loop
编辑:我修好了
while(scanf("%d %d %d %d", &imageWidth, &imageHeight, &safeRegionStart, &safeRegionWidth)==4&&!feof(stdin)) { }
!feof(stdin)
可能没有必要。
EOF
只是一个整数常量。 在大多数系统上它是-1
。 !-1
为false
, while(false)
不执行任何操作。
你想要的是检查scanf
的返回值。 scanf
返回成功读取的项目数,最终返回EOF
。
嗯,这很容易回答:
EOF是常量#define
,例如#define EOF -1
。
因此,您的while(!EOF)
条件将始终为false,并且循环将不会执行。 您需要检查scanf
对EOF的返回值。
你需要这样的东西:
while(scanf("%d %d %d %d", &imageWidth, &imageHeight, &safeRegionStart, &safeRegionWidth) != EOF){
您必须使用变量来保存可能是EOF
的char值。 就像是 ..
while(4==scanf("%d %d %d %d", &imageWidth, &imageHeight, &safeRegionStart, &safeRegionWidth)) { //do stuff }
否则!EOF总是假的。
永远不会输入循环。 EOF
是一个常量值,为-1
(对于此定义,请检查stdio.h
)。 所以!EOF
为0
,这是假的,因此永远不会输入。
要检查文件是否已经结束,您可以使用: if (feof (file_ptr)) break;
while (1) { /* Read file */ if (feof (file_ptr)) break; /* Do work */ }