该程序将询问用户数字,然后对它们进行排序,并显示数组中有多少个三元组。如果我输入{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);
}
}
答案 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 );
}