在C中正确使用EOF

时间:2011-06-01 04:14:10

标签: c eof do-while if-statement

我是编程新手,我真的很想学写一个体面的程序。我不确定如何使用EOF。我的程序已编译,当我运行它时,除EOF部分外它工作正常。该程序应该返回-1值(在使用CTRL + z之后)到main函数,并将打印一个语句然后关闭程序。 -1是与EOF本身的-1不同的值。

 #include <stdio.h>
//Function Declaration
int inputFunction (int num);

int main (void)
{
    //Local Declarations
    int num;
    do
    {    
    inputFunction (num);

    if (num < 0 || num > 100)
            inputFunction (num);
    else
        inputFunction (num);
    }while (num != -1);
    return 0;
}
int inputFunction (int num)
{
    int rc;

    do
    {
    printf("Enter an integer from 0 to 100: \n");
    rc = scanf("%d", &num);
       {
       if (rc != EOF)
              {
              if (num < 0 || num >100)
                 {
                 printf("ERROR\n");
                 return num;
                 }
              else
                  {
                 return num;
                 }
              }
       else
           {
           num = -1;
           return num;
       }
       }  
    }while (rc != EOF);
    }

3 个答案:

答案 0 :(得分:4)

变量num永远不会在main中分配。您调用inputFunction并返回一个值,但忽略它返回的值。

答案 1 :(得分:2)

CTRL-Z(^ Z)的ASCII值,通常在DOS中用作文件结束标记,为26(十进制)。并记住您在main中传递变量num作为调用值不作为引用,因此在比较时它将包含垃圾值。

答案 2 :(得分:1)

正如Gabe所说,你需要分配inputFunction()的返回值才能使用它 - 因为函数中的变量具有 local 范围。所以每当你在main()中调用inputFunction()时,你应该这样做:

num = inputFunction(num);

否则,当程序执行返回main()时,inputFunction()中num的值将丢失。这是您的程序未按预期执行的主要原因。

您的代码也存在一些逻辑问题。在main()的第一个if / else语句中,两个语句产生完全相同的结果。其他行为可能也不是您想要做的。

我认为您可以通过使用笔和纸计划您希望程序执行的操作而受益。一种方法是“绘制”程序将用箭头等做什么(流程图)。或者你可以从目标的1-2个句子描述开始,然后逐渐将其扩展到越来越多的细节,直到你有一系列程序将执行的任务,然后你可以转换为代码。