在 C 语言中传递函数输出不正确
Passing function output isn't correct in C
这个程序会向用户询问数字,然后对它们进行排序,并显示数组中有多少个三元组。如果我输入{1,2,3,3,4,5,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%dn", counter);
}
}
uin[i] == uin[i + 1] && uin[i + 2]
应为uin[i] == uin[i + 1] && uin[i] == uin[i + 2]
。仔细研究这两个,确保你理解其中的区别!
此外,正如Joachim所指出的,循环条件应该是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%dn", counter );
}
相关文章:
- Windows 10命令提示符的输出不正确
- C++ - 为什么 unicode 输出不正确?
- 我的叉子输出不正确
- C++使用 CEIL 和长度输出不正确的值
- 使用 iconv 进行 UTF8 转换的输出不正确
- C strftime()输出不正确
- 当行数和列不匹配时,输出不正确
- C++ 嵌套循环输出不正确
- 矩阵和矢量乘法,输出不正确的产品
- 我对这个问题有问题,我的输出不正确
- 上一个较大的数字代码中的输出不正确
- 二进制搜索树的输出不正确
- 拆解输出不正确(BeaEngine)
- 最大输出不正确
- 基本合并排序中的输出不正确
- 更改声明顺序时输出不正确
- Base64 转换器的输出不正确
- 使用 find_first_of() 和 substr() 分隔字符串,但我得到的输出不正确
- 对字符串进行索引时输出不正确
- .wav C++数据输出不正确