Эта программа будет запрашивать у пользователя цифры, а затем сортирует их и отображает, сколько триплетов находится в массиве. Если я введу {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);
}
}
uin[i] == uin[i + 1] && uin[i + 2]
должно быть uin[i] == uin[i + 1] && uin[i] == uin[i + 2]
. Изучите эти два тщательно и убедитесь, что вы понимаете разницу!
Кроме того, как указал Йоахим, условие цикла должно быть i < count - 2
.
Обычно, когда массивы используются в качестве параметров функций, первым параметром является сам массив, а второй параметр - количество элементов в массиве. Поэтому вместо
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 );
}
void triplet(int count, int uin[count]);
будет иметь некоторый смысл (а затем count
должен предшествовать uin
в списке аргументов).
i
равенcount - 1
), как вы думаете,uin[i + 1]
иuin[i + 2]
получат свои числа?