C程序按值传递

时间:2016-02-19 17:31:16

标签: c

我有一个完整的C程序,提示用户输入0到100000之间的数字。然后打印出数字的每个数字。我的代码完成了任务,但它没有通过理想的函数正确传递值。我需要一些关于如何获取我所拥有的东西的建议,并通过函数正确传递用户值并返回。

    #include <stdio.h>


    void print_1(int,int);
    void print_10(int,int);
    void print_100(int,int);
    void print_1000(int,int);
    void print_10000(int,int);

    int main() {
        int userInput;
        printf("Please enter a positive number less than 100,000: \n");
        scanf("%d", &userInput);
        if (userInput > 0 && userInput < 100000)
        {
            printf("\nYou have entered: %d\n",userInput);;

        }
        else
        {
            printf("\nThe number you have entered is out of the specified range\n");
            exit(0);
        }
        int lastDigit;
        print_1(userInput,lastDigit);


    } //End main


// ===========================================================================
//  Function      : Print_1
//  Description   : Prints out the 1st digit of user input
//
//  Input         :
//                  input userInput
//                  output userInput
//  Return value  :
//                 return value
//
//  Notes: This function repeats several printing the lastDigit then slicing it
//  off before passing on to a new function.
//============================================================================
     void print_1(int userInput,int lastDigit)
            {
            lastDigit = userInput % 10;
            printf("\n1\'s:     %d \n", lastDigit);
            userInput = (userInput - lastDigit) / 10;\
            print_10(userInput,lastDigit);
            } // end print_1

// ===========================================================================
//  Function      : Print_10
//  Description   : Prints out the 1st digit of user input
//
//  Input         :
//                  input userInput
//                  output userInput
//  Return value  :
//                 return value
//
//  Notes: This function repeats several printing the lastDigit then slicing it
//  off before passing on to a new function.
//============================================================================
    void print_10(int userInput,int lastDigit)
            {
            lastDigit = userInput % 10;
            printf("\n10\'s:    %d \n", lastDigit);
            userInput = (userInput - lastDigit) / 10;
            print_100(userInput,lastDigit);
            } // end print_10

// ===========================================================================
//  Function      : Print_100
//  Description   : Prints out the 1st digit of user input
//
//  Input         :
//                  input userInput
//                  output userInput
//  Return value  :
//                 return value
//
//  Notes: This function repeats several printing the lastDigit then slicing it
//  off before passing on to a new function.
//============================================================================
    void print_100(int userInput,int lastDigit)
            {
            lastDigit = userInput % 10;
            printf("\n100\'s:   %d \n", lastDigit);
            userInput = (userInput - lastDigit) / 10;
            print_1000(userInput,lastDigit);
            } //end print_100

// ===========================================================================
//  Function      : Print_1000
//  Description   : Prints out the 1st digit of user input
//
//  Input         :
//                  input userInput
//                  output userInput
//  Return value  :
//                 return value
//
//  Notes: This function repeats several printing the lastDigit then slicing it
//  off before passing on to a new function.
//============================================================================
    void print_1000(int userInput,int lastDigit)
            {
            lastDigit = userInput % 10;
            printf("\n1000\'s:  %d \n", lastDigit);
            userInput = (userInput - lastDigit) / 10;
            print_10000(userInput,lastDigit);
            } //end print_1000

// ===========================================================================
//  Function      : Print_10000
//  Description   : Prints out the 1st digit of user input
//
//  Input         :
//                  input userInput
//                  output userInput
//  Return value  :
//                 return value
//
//  Notes: This function repeats several printing the lastDigit then slicing it
//  off before passing on to a new function.
//============================================================================
    void print_10000(int userInput,int lastDigit)
            {
            lastDigit = userInput % 10;
            printf("\n10000\'s: %d \n", lastDigit);
            userInput = (userInput - lastDigit) / 10;
            return userInput;
            }//end print_10000

             //End Program

2 个答案:

答案 0 :(得分:2)

我不确定你是在尝试实现这个代码,但每个args都是通过值传递的。在您的代码中:

int lastDigit;
print_1(userInput,lastDigit);

您正在传递未初始化的变量lastDigit。你基本上是在发送&#34;乱语&#34;到你的print_函数。虽然它对结果没有影响,因为你在函数内部初始化它,这是一种不好的做法,可能会让你以后遇到麻烦。你应该更改它们:删除lastDigit参数并在本地声明它,如下所示:

void print_1(int userInput)
{
   int lastDigit = userInput % 10;

但是,如果您希望lastDigit保留函数内部的值,则需要传递地址。

int lastDigit;
print_1(userInput, &lastDigit);

并像这样修改你的原型:

void print_1(int userInput, int *lastDigit)

并且您将需要修改您的代码中的各种变量。这些上限意味着警告,以防万一如此倾向于改变这一论点。您需要先阅读指针。

http://www.cprogramming.com/tutorial/c/lesson6.html http://www.tutorialspoint.com/cprogramming/c_pointers.htm

答案 1 :(得分:0)

在你的程序中,你需要初始化lastDigit,编译器将对其进行补偿。

int lastDigit = 0;

此外,您无需在方法中传递lastDigit,因为它在您的程序中没有执行任何操作。

除此之外,您可以使用余数来查找最后的数字。这是相同的代码。

int main() {
        int userInput;
        printf("Please enter a positive number less than 100,000: \n");
        scanf("%d", &userInput);
        if (userInput > 0 && userInput < 100000)
        {
            printf("\nYou have entered: %d\n",userInput);;

        }
        else
        {
            printf("\nThe number you have entered is out of the specified range\n");
            exit(0);
        }

        int inputValue = userInput;
        int count = 1;

        while(inputValue > 0)
        {
            int remainder = inputValue % 10;
            inputValue = inputValue / 10;
            printf("\nThe %d value is %d \n", count, remainder);
            count++;
        }
 return 0;

}