在C中正确使用EOF

| 我是编程的新手,我真的很想学习编写一个体面的程序。我不确定如何使用EOF。我的程序已编译,当我运行它时,除EOF部分外,它都能正常工作。该程序应该向主函数返回-1值(使用CTRL + z之后),并打印一条语句,然后关闭程序。 -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);
    }
    
已邀请:
        变量
num
从未在
main
中赋值。您调用
inputFunction
,它返回一个值,但是您忽略了它返回的值。     
        CTRL-Z(^ Z)的ASCII值(通常在DOS中用作文件结尾标记)为26(十进制)。请记住,您将main中的变量num作为值的传递而不是作为引用传递给它比较时将包含垃圾值。     
        正如Gabe所说,您需要分配inputFunction()的返回值才能使用它-因为函数中的变量具有局部作用域。因此,每次在main()中调用inputFunction()时,都应该像这样:
num = inputFunction(num);
否则,当程序执行返回main()时,inputFunction()中的num值将丢失。这是您的程序未按预期执行的主要原因。 您的代码也存在一些逻辑问题。在main()的第一个if / else语句中,两个语句产生的结果完全相同。其他行为可能也不完全是您想要执行的操作。 我认为您可以通过用笔和纸计划您希望程序执行的操作而受益。一种方法是“绘制”出程序将使用箭头等(流程图)执行的操作。或者,您可以从目标的1-2个句子的描述开始,然后逐渐将其扩展为越来越多的细节,直到您有程序要执行的一系列任务,然后可以将其转换为代码。     

要回复问题请先登录注册