[英]C programming function calling to return values
我是软件工程第一年的大学生。 我在学期的第四周,在我的编程课上遇到了麻烦。 目前,我得到了这个任务,其中我得到了一个名为“getNum()”的函数,我必须在另一个函数中使用它,程序用户将输入一个数字和我编程的函数(必须命名为 isOdd( )) 将确定数字是奇数还是偶数。 然后主函数将打印数字是奇数还是偶数。 这是我教授的措辞:
" 编写一个程序,使用在作业 2 中提供给您的 getNum() 函数从用户那里获取一个数字(一如既往地首先提示他们)。创建并使用一个名为 isOdd 的函数,并带有参数(数字)和返回值(如果数字是奇数,0 如果数字是偶数或使用 bool 或布尔数据类型,您的选择)来确定数字是否为奇数。在 main() 中,告诉用户(通过使用 printf() 或 cout 显示)数字是否为偶数或奇数。”
现在,我遇到的问题是理解编程,因为我对它相当陌生,有些词让我感到困惑,例如参数和返回值。 为了给你和我到目前为止所写的想法,
#include <stdio.h>
int isOdd(int numInput);
int getNum(void);
int main(void)
{
int number = 0;
while (number > -1)
{
if (isOdd(0))
{
printf("The number is even.\n");
}
else if (isOdd(1))
{
printf("The number is odd.\n");
}
}
return 0;
}
int isOdd(int numInput)
{
int myNumber = 0;
printf("Please enter a number: ", numInput);
myNumber = getNum();
if (myNumber % 2 == 0)
{
myNumber == 0;
}
else
{
myNumber == 1;
}
return myNumber;
}
#pragma warning(disable: 4996)
int getNum(void)
{
/* the array is 121 bytes in size; we'll see in a later lecture how we can improve this code */
char record[121] = { 0 }; /* record stores the string */
int number = 0;
/* NOTE to student: indent and brace this function consistent with your others */
/* use fgets() to get a string from the keyboard */
fgets(record, 121, stdin);
/* extract the number from the string; sscanf() returns a number
* corresponding with the number of items it found in the string */
if (sscanf(record, "%d", &number) != 1)
{
/* if the user did not enter a number recognizable by
* the system, set number to -1 */
number = -1;
}
return number;
}
这就是我写的,试图按照我教授的指示做事,因为我还不知道如何正确使用布尔值。 如您所见,底部是我的教授所说的getNum()函数,该函数对于此作业是必需的。 截至目前,我输入的所有内容,我被告知是偶数。 我不是要求你们为我解决并为我做所有事情,但我想了解我做错了什么,我的想法做错了什么,并总体上更好地理解我对未来的编程。 谢谢
在不知道你为什么这样做的情况下,很难帮助你。 很多代码只是莫名其妙:
if (isOdd(0))
为什么要向isOdd
传递零?
printf("Please enter a number: ", numInput);
myNumber = getNum();
numInput
应该是他们输入的数字还是myNumber
应该是?
if (myNumber % 2 == 0)
{
myNumber == 0;
}
语句myNumber == 0
将myNumber
与零进行比较以查看它们是否相等。 它在这里没有任何用处,因为您忽略了比较的结果。
功能:
int getNum(void)
不接受任何参数 ( void
),并返回一个整数 ( int
) 值。 函数本身接受来自标准输入 ( stdin
) 流的输入——这通常来自键盘。
要完成您的作业,您应该编写一个函数:
int isOdd( int value ) ;
其中value
是一个整数参数,如果 value 是奇数,则返回值为 1,如果是偶数,则返回值为 0。 或者,您可以使用 Boolean 类型:
#include "bool.h"
bool isOdd( int value ) ;
在这种情况下,您将为奇数返回true
为偶数返回false
。
您的isOdd()
包括getNumber()
调用和用户提示代码。 这不仅没有在赋值中指定,而且设计很差,使得isOdd()
难以在更一般的情况下使用。 赋值明确要求您将要测试的值作为参数传递。
分配不需要您迭代测试(不需要while
循环)。 用户输入提示和接受应主要如下:
int main(void)
{
printf( "Please enter a number: " ) ;
fflush( stdin ) ; // you'll may this on some platforms
int myNumber = getNum();
if( isOdd( myNumber ) )
{
printf("The number is odd.\n");
}
else
{
printf("The number is even.\n");
}
}
return 0;
}
请注意,只有两种可能的结果,因此您不需要else if( !isOdd( myNumber ) ...
- 如果它不是奇数,则隐式为偶数。
您的isOdd()
函数可以工作,但过于复杂。 您需要返回一个布尔值(具有两个可能值 true/false 的类型 - 或可以隐式转换为布尔值的整数 1/0),并且(myNumber % 2 == 0)
是一个布尔表达式(表达式有两种可能的结果真或假)。 任何你看到模式的地方:
if( <boolean expression> )
{
b = true ;
}
else
{
b = false ;
}
你可以简单地写:
b = <boolean expression> ;
在您的情况下,奇数的布尔确定只是value % 2 != 0
。 您可以直接返回:
bool isOdd( int value )
{
return value % 2 != 0 ;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.