C++明明定义了函数,为什么执行时不起作用?


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);

  
}

下面是运行结果

img

代码没问题,输入完成后,先输入t按回车出现结果