我正在阅读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)
可能没有必要。
答案 0 :(得分:8)
EOF
只是一个整数常量。在大多数系统上,它是-1
。 !-1
为false
,while(false)
不会做任何事情。
您想要检查scanf
的返回值。 scanf
返回成功读取的项目数,最终返回EOF
。
答案 1 :(得分:2)
嗯,这很容易回答:
EOF是常数#define
,例如#define EOF -1
。
因此,您的while(!EOF)
条件将始终为false,并且循环将不会执行。您需要检查scanf
对EOF的返回值。
您需要以下内容:
while(scanf("%d %d %d %d", &imageWidth, &imageHeight, &safeRegionStart, &safeRegionWidth) != EOF){
答案 2 :(得分:1)
您必须使用变量来保存可能EOF
的char值。像...这样的东西。
while(4==scanf("%d %d %d %d", &imageWidth, &imageHeight, &safeRegionStart, &safeRegionWidth)) {
//do stuff
}
否则!EOF总是错误的。
答案 3 :(得分:1)
永远不会输入循环。 EOF
是一个常量值-1
(对此定义检查stdio.h
)。所以!EOF
是0
,这是假的,因此永远不会输入。
要检查文件是否已结束,您可以使用:if (feof (file_ptr)) break;
while (1)
{
/* Read file */
if (feof (file_ptr))
break;
/* Do work */
}