我有一个完整的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
答案 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;
}