我是初学者,我到处寻找这个解决方案,但没有结果。我试图做的是一个函数,它返回两个数字的更大值。 但是,输出给我带来了一些垃圾数量,这就是我的问题。 继承我的代码
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int largest(int num1, int num2)
{
int biggest;
if (num2 > num1) {
printf("%d is bigger than %d\n\0", num2, num1);
}
if (num1 > num2){
printf("%d is bigger than %d\n", num1, num2);
}
if (num1 == num2) {
printf("%d and %d are equal\n", num1, num2);
}
}
int main()
{
printf("%d\n", largest(2, 4));
return(0);
getchar();
}
我试过在我的字符串末尾使用\ 0但是我的输出仍然给了我:
4 is bigger than 2
2
最后的问题是我的问题(有时是一个不同的角色),我该如何摆脱它?而且,这里的重点是函数,我可以在没有函数的情况下完成,但我想学习函数。 谢谢!
答案 0 :(得分:3)
您的函数未返回任何值,因此printf
中的main
会打印垃圾。该功能还复制了main
中的打印件。这是一个简单的补救措施。
#include <stdio.h>
int largest(int num1, int num2)
{
return num1 > num2 ? num1 : num2;
}
int main(void)
{
printf("%d\n", largest(2, 4));
return 0;
}
节目输出:
4
答案 1 :(得分:1)
getchar()
位于主要功能中的return
之后。largest()
。2
的第二行是printf()
打印的函数返回值,因为函数内部没有任何返回值,它将输出默认的返回值。解决方案:不要在printf()
内调用函数。你可以直接调用函数。
largest(2,4);
代替printf("%d\n", largest(2, 4));
或者在必要时在函数内添加return语句。
答案 2 :(得分:1)
计算机正在打印一个额外的号码,因为您已将其告知:
printf("%d\n", largest(2, 4));
如果您不想要打印largest(2, 4)
的返回值,请将其更改为:
largest(2, 4);
答案 3 :(得分:0)
您不会从最大()函数返回任何值。例如,当num1较大时,return num1;
。
int largest(int num1, int num2)
{
int biggest;
if (num2 > num1)
return num2;
else
return num1;
}
但是这个实现也存在问题:如果数量相等怎么办?您无法通过此界面确定,因为它似乎被定义为返回值是两者中较大的一个。
实现这个的另一种方法是让函数返回-1,如果num1&gt; num2,num2的1&gt; num1和0,如果值相等。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv);
int largest(int num1, int num2, int* largestValue);
/*******************************************/
/* function that compares two numbers and */
/* returns: */
/* -1 if num1 > num2 */
/* 1 if num2 > num1 */
/* 0 if num1 == num2 */
/* if the return value is not 0 then the */
/* larger of the numbers is copied into */
/* the location pointed to by largestValue */
/*******************************************/
int largest(int num1, int num2, int *largestValue) {
int rc = 0;
if (num1 > num2) {
rc = -1;
*largestValue = num1;
} else if (num2 > num1) {
rc = 1;
*largestValue = num2;
}
return rc;
}
/* run pgm with "pgname num1 num2" */
int main(int argc, char **argv) {
int largestNum;
int num1=atoi(argv[1]);
int num2=atoi(argv[2]);
int rc = largest(num1, num2, &largestNum);
if (rc != 0)
printf("Largest of %d and %d is %d\n", num1, num2, largestNum);
else
printf("The numbers are equal");
return 0;
}
但是,如果有一个函数的目的是返回两个值中的较大值,那么这似乎有点过分。大多数(如果不是所有)标准库都提供了max()宏,它可以执行您最初尝试使用maximum()函数的内容。
答案 4 :(得分:0)
问题在于:
printf("%d\n", largest(2, 4));
您正在打印largest
功能的返回值,但您没有从该功能返回任何值。
更新你的函数以在每种情况下返回更大的值:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int largest(int num1, int num2)
{
if (num2 > num1) {
printf("%d is bigger than %d\n", num2, num1);
return num2;
} else if (num1 > num2){
printf("%d is bigger than %d\n", num1, num2);
return num1;
} else {
printf("%d and %d are equal\n", num1, num2);
return num1;
}
}
int main()
{
printf("%d\n", largest(2, 4));
return(0);
}