C中的传递函数输出不正确

时间:2014-04-12 14:14:00

标签: c++ c arrays

该程序将询问用户数字,然后对它们进行排序,并显示数组中有多少个三元组。如果我输入{1,2,3,3,3,4,5,3,3,6,7},它将是3个三胞胎。

我不知道我的void triplet(int count, int uin[])函数会发生什么;它不起作用。请帮我解决这个问题。

#include "stdafx.h"
#include <stdio.h>

void sorting(int count, int uin[]);
void triplet(int count, int uin[]);

int uin[30];
int i;
int done;
int count = 0;

int main()
{
    for (i = 0; i < 30; i++)
    {
        printf("plase input the number: ");
        done = scanf_s("%d", &uin[i]);

        if (done != EOF)
        {
            count++;
        }
        else
        {
            break;
        }
    }
    sorting(count, uin);
    triplet(count, uin);
    return 0;
}    

void sorting(int count, int uin[])
{
    int i, j, temp;
    for (i = 0; i < count; i++)
    {
        for (j = 0; j < count - 1; j++)
        {
            if (uin[i]<uin[j])
            {
                temp = uin[i];
                uin[i] = uin[j];
                uin[j] = temp;
            }
        }
    }
}    

void triplet(int count, int uin[])
{
    int i;
    int counter = 0;
    for (i = 0; i < count; i++)
    {
        if (uin[i] == uin[i + 1] && uin[i + 2])
        {
            counter++;
        }
        printf("\n%d\n", counter);
    }
}

2 个答案:

答案 0 :(得分:2)

uin[i] == uin[i + 1] && uin[i + 2]应为uin[i] == uin[i + 1] && uin[i] == uin[i + 2]。仔细研究这两个,确保你了解它们的区别!

另外,正如Joachim指出的那样,循环条件应为i < count - 2

答案 1 :(得分:1)

通常,当数组用作函数的参数时,第一个参数是数组本身,第二个参数是数组中元素的数量。而不是

void triplet(int count, int uin[]);

我会按以下方式声明该功能

void triplet( const int uin[], int n );

您的功能定义无效。首先,它在if语句中使用无效条件

if (uin[i] == uin[i + 1] && uin[i + 2])

其次是尝试访问数组之外​​的内存。

该功能可以定义为

void triplet( const int uin[], int n )
{
    int i;
    int counter = 0;

    for ( i = 0; i + 2 < n; i++ )
    {
        counter += uin[i] == uin[i + 1] && uin[i + 1] == uin[i + 2];
    }

    printf( "\n%d\n", counter );
}