| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3683 人关注过本帖
标题:求助,无法输出结果,编译可以过
只看楼主 加入收藏
q452953979
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2016-1-4
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:13 
求助,无法输出结果,编译可以过
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
char **readWords(int n)
{
    int i;
    char *a=malloc(n*sizeof(int));
    char **b=malloc(n*sizeof(*a));
    for(i=0;i<n;i++){
        scanf("%d",&*(a+i));
    }
    for(i=0;i<n;i++){
        *(b+i)=a+i;
    }
    return b;
}
void sort(char **ptr, int size,int *minlenPtr,int *maxlenPtr)
{
    int i,j,len=0,maxlen=0,minlen=0;
    char temp;
   
     for (j=0;j<size;j++){
         for(i=0;i<size-j;i++)
        {
            if(strlen(*(ptr+i))<strlen(*(ptr+j)))
            {
                temp=**(ptr+i);
                **(ptr+i)=**(ptr+j);
                **(ptr+j)=temp;
            }
            while(**ptr=getchar()!='n'){
                len++;
                if(len>maxlen){
                    maxlen=len;
                    *maxlenPtr=maxlen;
                }
                if(len<minlen){
                       minlen=len;
                    *minlenPtr=minlen;
                }
            }
        }
     }
     printf("Min length is %d and max length is %d",minlen,maxlen);
}
void output(char **ptr,int size)
{
    int i;
    for(i=0;i<size;i++){
        printf("%c",**(ptr+i));
    }
}
void freeMemory(char **ptr,int size)
{
    free(readWords(size));
    ptr=NULL;
}

main()
{
    char *ptr=0;
    int n;
    int *minlenPtr;
    int *maxlenPtr;
    printf("Please input the number of words:");
    scanf("%d",&n);
    getchar();
    printf("Please input the words:n");
    readWords(n);
    sort(&ptr,n,minlenPtr,maxlenPtr);
    output(&ptr,n);
    freeMemory(&ptr,n);
   
    system("pause");
   
}

搜索更多相关主题的帖子: include return 
2016-01-04 16:24
q452953979
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2016-1-4
收藏
得分:0 
(1) 实现函数char ** readWords(int n),用于从键盘读取n个单词,保存在动态申请的字符数组中,字符数组首地址保存在动态申请的指针数组中。返回指针数组首元素的地址。
(2) 实现函数void sort(char * * ptr, int size,int * minlenPtr,int * maxlenPtr),用于对单词按照长度的从小到大顺序进行排序,并将单词的最短长度和最长长度分别写入minlenPtr和maxlenPtr指向的整形变量中。
(3) 实现函数void output(char ** ptr,int size),用于输出单词
(4) 实现函数void freeMemory(char ** ptr,int size),用于释放动态申请的内存,包括指针数组和字符数组的内存空间。


这是题目的几个要求。
2016-01-04 16:27
q452953979
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2016-1-4
收藏
得分:0 
Please input the words:
Where↙
there↙
is↙
hope↙
a↙
way↙
Min length is 1 and max length is 5
After sort,the words are:
a
is
way
hope
Where
there


这是样例
2016-01-04 16:27
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
“無法輸出結果”是什麽意思?

授人以渔,不授人以鱼。
2016-01-04 16:31
q452953979
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2016-1-4
收藏
得分:0 
回复 4楼 TonyDeng
应该说输出的时候报错了,It stopped with signal SIGSEGV.Segmentation fault
2016-01-04 16:33
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你連第一個要求都沒調通就寫那麽多吧?

授人以渔,不授人以鱼。
2016-01-04 16:59
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
先逐個功能實現
程序代码:
/*
    來源: http://bbs.bccn.net/thread-460816-1-1.html

    題目要求:
    (1) 实现函数char ** readWords(int n),用于从键盘读取n个单词,保存在动态申请
        的字符数组中,字符数组首地址保存在动态申请的指针数组中。返回指针数组首
        元素的地址。
    (2) 实现函数void sort(char * * ptr, int size,int * minlenPtr,int * maxlenPtr),
        用于对单词按照长度的从小到大顺序进行排序,并将单词的最短长度和最长长度分别
        写入minlenPtr和maxlenPtr指向的整形变量中。
    (3) 实现函数void output(char ** ptr,int size),用于输出单词
    (4) 实现函数void freeMemory(char ** ptr,int size),用于释放动态申请的内存,包
        括指针数组和字符数组的内存空间。

    様例:
    Please input the words:
    Where↙
    there↙
    is↙
    hope↙
    a↙
    way↙
    Min length is 1 and max length is 5
    After sort,the words are:
    a
    is
    way
    hope
    Where
    there

    作者: TonyDeng
    日期: 2016.01.04.
    編譯: VC++14 in VS2015
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

// 預定義每個單詞不包含結束字符的最大字符數
// 註:1.不建議使用傳統的#define宏
//     2.建議使用新的size_t類型
const size_t MAX_WORD_LENGTH = 80;

/*
    功能:
    实现函数char ** readWords(int n),用于从键盘读取n个单词,保存在动态申请
    的字符数组中,字符数组首地址保存在动态申请的指针数组中。返回指针数组首
    元素的地址。

    註: 1.不考慮內存申請失敗情形
        2.假定輸入的n在合理數値範圍內
*/
char ** readWords(int n)
{
    char ** pBuffer = (char**)calloc(n, sizeof(char*));
    if (!pBuffer)
    {
        return NULL;
    }

    for (int i = 0; i < n; ++i)
    {
        pBuffer[i] = (char*)calloc(1, MAX_WORD_LENGTH + 1);        // 注意可能遇到申請失敗的情形!
        if (pBuffer[i])
        {
            scanf_s("%s", pBuffer[i], MAX_WORD_LENGTH);
        }
    }

    return pBuffer;
}

// 功能: 釋放內存
void FreeMemory(char ** ptr, int n)
{
    for (int i = 0; i < n; ++i)
    {
        free(ptr[i]);
    }
}

int main(void)
{
    int number = 0;
    do
    {
        printf_s("Input n: ");
        rewind(stdin);
    } while (scanf_s("%d", &number) != 1);

    printf_s("Input text:\n");
    char ** data = readWords(number);
    if (data)
    {
        printf_s("\nYour input is:\n");
        for (int i = 0; i < number; ++i)
        {
            printf_s("%s\n", data[i]);
        }
    }

    FreeMemory(data, number);

    printf_s("\nPress any key to continue...");
    _getch();
    return EXIT_SUCCESS;
}

授人以渔,不授人以鱼。
2016-01-04 17:39
q452953979
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2016-1-4
收藏
得分:0 
回复 6楼 TonyDeng
表示并不是很懂指针啊。。。。第一个应该怎么改。。
2016-01-04 17:43
q452953979
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2016-1-4
收藏
得分:0 
回复 7楼 TonyDeng
THX。。。刚开始学指针。。好难感觉
2016-01-04 17:44
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用q452953979在2016-1-4 17:44:37的发言:

THX。。。刚开始学指针。。好难感觉


告訴你思路,你對照著我的代碼看:題目要求其實是返回一個二維數組,它有n行,每行是一個足够寛度的字符串,所以這個返回的指針不是普通用malloc()就可以的。这个返回的指針,是一個二級char**指針,第一級,是n個指針(每個指向一個字符串),申請一塊內存存放這n個指針pBuffer,這就是代碼中第一步的動作。得到這n個指針之後,就是下面的,給每個指針再指向一塊存放單詞字符串的內存,並按題目要求讀入相應的數據。最後,返回這個pBuffer指針即可。

授人以渔,不授人以鱼。
2016-01-04 17:52
快速回复:求助,无法输出结果,编译可以过
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.107614 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved