void rnk(int x[20]) {
int n = (sizeof(x) / sizeof(int));
int p = 0;
for (int i = 0; i < n; i++) {
for (p = 0; p < n - 1 - i; p++) {
while (x[p] > x[p + 1])
{
int tmp = 0;
tmp = x[p];
x[p] = x[p + 1];
x[p + 1] = tmp;
}
}
}
}
int main()
{
int a[20], t, i = 0;
memset(a, 0, sizeof(a));
while (cin >> t) {/*输入任意个整数(小于20个)*/
a[i] = t;
i++;
}
rnk(a);
for (int i = 0; i < 20; i++) {
cout << a[i] << endl;
}
}
应该是你输入一直没有结束吧
代码修改如下:
#include <iostream>
using namespace std;
void rnk(int x[],int n)
{
//int n = (sizeof(x) / sizeof(int));
int p = 0;
for (int i = 0; i < n; i++) {
for (p = 0; p < n - 1 - i; p++) {
if (x[p] > x[p + 1]) //这里是if
{
int tmp = 0;
tmp = x[p];
x[p] = x[p + 1];
x[p + 1] = tmp;
}
}
}
}
int main()
{
int a[20], t, i = 0;
memset(a, 0, sizeof(a));
while (cin >> t) {/*输入任意个整数(小于20个)*/
a[i] = t;
i++;
}
rnk(a,i);
for (int j = 0; j < i; j++) {
cout << a[j] << endl;
}
return 0;
}
首先确认下这些问题。
1.代码输入23-26行,什么时候会退出输入。
2.代码第3行 函数中n的值,是否是你需要的值。
3.代码输出29-31行,输出的是原来的a[20],并不是函数返回的值。
下面是我根据我的理解修改了一下你的代码,希望有用。
#include <iostream>
#include <string.h>
using namespace std;
void rnk(int x[20],int n) {
int p = 0;
for (int i = 0; i < n; i++) {
for (p = 0; p < n-1-i; p++) {
if(x[p] > x[p + 1])
{
int tmp = 0;
tmp = x[p];
x[p] = x[p + 1];
x[p + 1] = tmp;
}
}
}
for (int i = 0; i < n; i++) {
cout << x[i] << endl; }
}
int main()
{
int a[20], t, i ,n= 0;
char huiche;
memset(a, 0, sizeof(a));
while (cin >> t) {/*输入任意个整数(小于20个)*/
huiche=(char)t;
if(huiche == '\xA')break;
a[i] = t;
n++;
i++;
}
rnk(a,n);
}
下面是运行结果
代码没问题,输入完成后,先输入t按回车出现结果