| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3223 人关注过本帖
标题:OJ 编译错误,本地可以运行
只看楼主 加入收藏
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
结帖率:93.75%
收藏
 问题点数:0 回复次数:3 
OJ 编译错误,本地可以运行
[local]1[/local]
a.c: In function 'main': a.c:28:3: warning: 'gets' is deprecated (declared at /usr/include/stdio.h:638) [-Wdeprecated-declarations] a.c: In function 'InsertT': a.c:49:3: warning: implicit declaration of function 'stricmp' [-Wimplicit-function-declaration] /tmp/ccDx9q9J.o: In function `main': a.c:(.text.startup+0x39): warning: the `gets' function is dangerous and should not be used. /tmp/ccDx9q9J.o: In function `InsertT': a.c:(.text+0xec): undefined reference to `stricmp' collect2: error: ld returned 1 exit status

我只知道涉及到了关键字有'gets()'(一次读一行)‘stricmp()’(字符串比较,不区分大小写)
这两个都是非常适用于这道题的关键函数,还是说OJ上面就是限制了不让我用着两个函数,非要我自己写??
如果有必要的话,原题在   https://pta.   
我的实现代码如下:
程序代码:
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
//C语言stricmp()函数:比较字符串(不区分大小写



typedef struct node *BinTree;
struct node {
    char Data[33];
    int cnt;
    BinTree Left;
    BinTree Right;
};

BinTree InsertT(BinTree BT,char*);
BinTree BuildT(char*);
void PrintT(BinTree,int);


int main() {
    int n;
    scanf("%d",&n);
    getchar();
    char a[33];
    BinTree BT=NULL;
    for(int i=0; i<n; i++) {
        gets(a);
        BT=InsertT(BT,a);
//    printf("\n------%d----------\n",i+1);       

    }

    PrintT(BT,n);

    return 0;
}
void PrintT(BinTree BT,int n) {
    if(BT) {
        PrintT(BT->Left ,n);
        double percent=(double)BT->cnt*100.0/n;

        printf("%s %.4lf%%\n",BT->Data ,percent);
//        printf("{%d}",BT->cnt );
        PrintT(BT->Right,n );
    }
}
BinTree InsertT(BinTree BT,char*name) {
    BinTree head=BT;
    while(BT) {
        int flag=stricmp(BT->Data ,name);
        if(flag<0) {
            if(BT->Right)BT=BT->Right ;
            else {

                BT->Right =BuildT(name);
                return head;
            }
        }else
        if(flag>0) {
            if(BT->Left )BT=BT->Left ;
            else {
                BT->Left =BuildT(name);
                return head;
            }
        }else{
            BT->cnt+=1 ;
//            printf("[]");
            return head;
        }
    }

    return BuildT(name);
}

BinTree BuildT(char*Data) {
    BinTree New=(BinTree)malloc(sizeof(struct node));
    strcpy(New->Data ,Data);
    New->cnt =1;
    New->Left =NULL;
    New->Right =NULL;
    return New;
}

重申一下,关键还是想问最前面的“编译错误”提示里都表达了什么意思,给翻译一下,百度上面找不到类似的案例。(或者是我不会找吧)

搜索更多相关主题的帖子: undefined dangerous reference function declared 
2016-08-03 04:21
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
同自己想的差不多,我把gets()stricmp()函数自己写了一遍,就行了。。。

可以推断提示的内容就是那两个函数不许用!

φ(゜▽゜*)♪
2016-08-03 05:14
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
'gets' is deprecated ------ gets在很久很久以前,就被C/C++语言废弃
undefined reference to `stricmp' ------ stricmp不是一个C语言标准库函数
收到的鲜花
  • 书生牛犊2016-08-03 08:47 送鲜花  20朵   附言:我很赞同
2016-08-03 08:46
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
回复 3楼 rjsp
谢谢。。。

φ(゜▽゜*)♪
2016-08-03 08:47
快速回复:OJ 编译错误,本地可以运行
数据加载中...
 
   



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

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