函数与字符串末尾的垃圾(尝试使用NULL)

时间:2015-12-02 20:44:16

标签: c null

我是初学者,我到处寻找这个解决方案,但没有结果。我试图做的是一个函数,它返回两个数字的更大值。 但是,输出给我带来了一些垃圾数量,这就是我的问题。 继承我的代码

   #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

最后的问题是我的问题(有时是一个不同的角色),我该如何摆脱它?而且,这里的重点是函数,我可以在没有函数的情况下完成,但我想学习函数。 谢谢!

5 个答案:

答案 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)

  1. getchar()位于主要功能中的return之后。
  2. 第一行输出来自函数largest()
  3. 输出2的第二行是printf()打印的函数返回值,因为函数内部没有任何返回值,它将输出默认的返回值。
  4. 解决方案:不要在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);
}