C中的无限循环

时间:2017-02-07 04:17:02

标签: c loops scanf

程序应接受stdin上的输入值,直到达到EOF。保证输入格式良好并包含至少一个有效浮点值。

示例输入:

3.1415 7.11 -15.7

预期产出:

3 3 4 7 7 8 -16 -16 -15 Done.

#include <stdio.h>  
#include <math.h>  
#include <stdlib.h>  

int main(void) 
{  
    for(;;)  
    {  
        float b;          
        scanf("%f", &b);  
        printf("%g %g %g\n",floor(b), round(b), ceil(b));  
        int i=0;  
        int result = scanf("%d", &i);  

        if( result == EOF)  
        {  
            printf("Done.\n");  
            exit(0);  
        }  

     }  
    return 0;  
} 

我的程序只运行一次。之后输出0 1 1

2 个答案:

答案 0 :(得分:0)

我认为你的第二个scanf是问题,就像其他人已经告诉你的那样。这样做怎么样? getchar()调用似乎更可靠地获得了EOF。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>


int main (void) {
    float b;

    for (;;) {
        scanf("%f",&b);
        printf("%g %g %g\n",floor(b),round(b),ceil(b));
        if (getchar() == EOF)
            break;
    }

    return 0;
}

答案 1 :(得分:0)

如果您希望使用scanf,可以使用返回值来检测错误/ EOF输入:

#include <stdio.h>  
#include <math.h>  
#include <stdlib.h>  

int main(void) 
{  
    int result = 0;
    for(;;)  
    {  
        float b;
        result = scanf(" %f", &b); 
        if(result == EOF)
            break;

        printf("%g %g %g\n",floor(b), round(b), ceil(b));  
     }  
     printf("Done");
    return 0;  
} 

Try it here.

同时查看this question也很有帮助。