繁体   English   中英

C 编程函数调用以返回值

[英]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 == 0myNumber与零进行比较以查看它们是否相等。 它在这里没有任何用处,因为您忽略了比较的结果。

功能:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM