鱼C论坛

 找回密码
 立即注册
查看: 1329|回复: 2

[已解决]求助佬,为什么我的代码没有输出值

[复制链接]
发表于 2019-10-9 01:00:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
       
int main()
{
void fac(int **p,int n);
        int str[20];
        int i,k;
        int *p1[20],**p2;
scanf("%d",&k);   //输入有几个数
       
        printf("请输入数字;");
for(i=0;i<k;i++)
        {
                p1[i]=&str[i];    //将指针数组指向str
        }


for(i=0;i<k;i++)     //给k-1个元素赋值
{
        scanf("%d",str[i]);
}       
       
        p2=p1;     //指向指针的指针p2指向 p1
        fac(p2,k);
        for(i=0;i<k;i++)
        {
                printf("%d ",*p1[i]);
               
        }
        return 0;
         }
void fac(int **p,int n)
{
        int *t,i,j;
        for(i=0;i<n-1;i++)
        {
               
                        for(j=i+1;j<n;j++)
                        {
                                if(**(p+i)>**(p+j))
                                 {
                                 t=*(p+i);     //将值进行交换
                                 *(p+i)=*(p+j);
                                 *(p+j)=t;
                        }
                         }
                 
         }
}
题目要求用指向指针的指针,输入n个数,将这n个数从小到大排序


我的结果如下
5
请输入数字5 6 4 7 9
然后后面就没有结果,不知道哪里错了
最佳答案
2019-10-9 01:52:32
本帖最后由 bin554385863 于 2019-10-9 17:39 编辑

谁告诉你函数的声明和定义实在main函数里面进行的?

#include<stdio.h>
        
int main()
{
void fac(int **p,int n);
        int str[20];
        int i,k;
        int *p1[20],**p2;
scanf("%d",&k);   //输入有几个数
        
        printf("请输入数字;");
for(i=0;i<k;i++)
        {
                p1[i.]=&str[i.];    //将指针数组指向str
        }
......
如果输入的K > 20,你确定不会数组越界?
#include <malloc.h>
#include <stdio.h>
void fuc(int **p, int n)
{
    int **p = (int **)malloc(sizeof(int *) * n);
    for (size_t i = 0; i < n; i++)
    {
        *(p + i) = (int *)malloc(sizeof(int));
        scanf("%d", (*p + i));
    }
    for (size_t i = 0; i < n - 1; i++)
    {
        for (size_t j = i + 1; j < n; j++)
        {
            if (*(*p + i) >= *(*p + j))
            {
                int t = *(*p + i);
                *(*p + i) = *(*p + j);
                *(*p + j) = t;
            }
        }
    }
    for (size_t i = 0; i < n; i++)
    {
        printf("%d ", *(*p + i));
    }
    free(p)
}
int main(int argc, char const *argv[])
{
    int **p = NULL;
    fuc(p, 5);
    return 0;
}
--------------------------------------------------------------------------------------------------
Microsoft Windows [版本 10.0.16299.1087]
(c) 2017 Microsoft Corporation。保留所有权利。

E:\Users\86184\Documents\Code>c:\Users\86184\.vscode\extensions\ms-vscode.cpptools-0.25.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-04gaq3lm.jte --stdout=Microsoft-MIEngine-Out-nppsv3hf.tln --stderr=Microsoft-MIEngine-Error-uhyqflbp.4ip --pid=Microsoft-MIEngine-Pid-wcrorhqu.nzb "--dbgExe=E:\My Program\MinGW\bin\gdb.exe" --interpreter=mi
100 100 2 300 0
0 2 100 100 300

E:\Users\86184\Documents\Code>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-9 01:52:32 | 显示全部楼层    本楼为最佳答案   
本帖最后由 bin554385863 于 2019-10-9 17:39 编辑

谁告诉你函数的声明和定义实在main函数里面进行的?

#include<stdio.h>
        
int main()
{
void fac(int **p,int n);
        int str[20];
        int i,k;
        int *p1[20],**p2;
scanf("%d",&k);   //输入有几个数
        
        printf("请输入数字;");
for(i=0;i<k;i++)
        {
                p1[i.]=&str[i.];    //将指针数组指向str
        }
......
如果输入的K > 20,你确定不会数组越界?
#include <malloc.h>
#include <stdio.h>
void fuc(int **p, int n)
{
    int **p = (int **)malloc(sizeof(int *) * n);
    for (size_t i = 0; i < n; i++)
    {
        *(p + i) = (int *)malloc(sizeof(int));
        scanf("%d", (*p + i));
    }
    for (size_t i = 0; i < n - 1; i++)
    {
        for (size_t j = i + 1; j < n; j++)
        {
            if (*(*p + i) >= *(*p + j))
            {
                int t = *(*p + i);
                *(*p + i) = *(*p + j);
                *(*p + j) = t;
            }
        }
    }
    for (size_t i = 0; i < n; i++)
    {
        printf("%d ", *(*p + i));
    }
    free(p)
}
int main(int argc, char const *argv[])
{
    int **p = NULL;
    fuc(p, 5);
    return 0;
}
--------------------------------------------------------------------------------------------------
Microsoft Windows [版本 10.0.16299.1087]
(c) 2017 Microsoft Corporation。保留所有权利。

E:\Users\86184\Documents\Code>c:\Users\86184\.vscode\extensions\ms-vscode.cpptools-0.25.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-04gaq3lm.jte --stdout=Microsoft-MIEngine-Out-nppsv3hf.tln --stderr=Microsoft-MIEngine-Error-uhyqflbp.4ip --pid=Microsoft-MIEngine-Pid-wcrorhqu.nzb "--dbgExe=E:\My Program\MinGW\bin\gdb.exe" --interpreter=mi
100 100 2 300 0
0 2 100 100 300

E:\Users\86184\Documents\Code>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-9 12:23:36 | 显示全部楼层
bin554385863 发表于 2019-10-9 01:52
谁告诉你函数的声明和定义实在main函数里面进行的?

#include

谢谢,懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-4 13:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表