0

我是编程新手,我真的很想学习编写一个像样的程序。我不确定如何使用 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);
    }
4

3 回答 3

4

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

于 2011-06-01T04:20:04.530 回答
2

CTRL-Z (^Z) 的 ASCII 值,通常在 DOS 中用作文件结束标记,它是 26(十进制)。记住你在 main 中传递变量 num 作为按值调用而 不是作为引用,所以它比较时会包含垃圾值。

于 2011-06-01T04:20:50.413 回答
1

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

num = inputFunction(num);

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

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

我认为您可能会受益于用笔和纸计划您希望程序执行的操作。一种方法是“绘制”程序将如何处理箭头等(流程图)。或者,您可以从 1-2 句目标描述开始,然后逐渐将其扩展为越来越详细的内容,直到您拥有程序将执行的一系列任务,然后您可以将其转换为代码。

于 2011-06-01T08:46:22.167 回答