我是编程新手,我真的很想学写一个体面的程序。我不确定如何使用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);
}
答案 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个句子描述开始,然后逐渐将其扩展到越来越多的细节,直到你有一系列程序将执行的任务,然后你可以转换为代码。