编译错误,但在DEV C++编译通过,望指教

P1307 [NOIP2011 普及组] 数字反转

小白的白 @ 2017-03-28 00:18:33

#include<stdio.h>
#include<string.h>
int main()
{
    char str[15],*p;
    p=str;
    gets(str);
    if(str[0]=='-'){//如果是负数,指针移动一位,提前输出符号 
        p++;
        printf("-");
    }
    strrev(p);//反转字符串 
    while(*p=='0')//找到第一个非零数 
    p++;
    if(*p=='0')//如果最后一位是零则指针后退一位 
    p--;
    puts(p);    
    return 0;
}

by 小白的白 @ 2017-03-28 00:23:15

/tmp/tmpyy9qiu.cpp: In function 'int main()':

/tmp/tmpyy9qiu.cpp:7:2: warning: 'char* gets(char*)' is deprecated (declared at /tmp/runtime/include/stdio.h:638) [-Wdeprecated-declarations]

gets(s);

^ /tmp/tmpyy9qiu.cpp:7:8: warning: 'char* gets(char*)' is deprecated (declared at /tmp/runtime/include/stdio.h:638) [-Wdeprecated-declarations]

gets(s);

^ /tmp/tmpyy9qiu.cpp:12:10: error: 'strrev' was not declared in this scope

strrev(p);

^ 这是提示信息,指针用的应该没错,strrev函数也在头文件string.h中,为什么会是编译错误呢?


by Lolierl @ 2017-03-28 07:02:21

1.你用cin不就行了

2.多写三四行代码,把那个我都没见过的strrev换掉

3.puts我也不知道是什么东西,还是cout靠谱

最后加一行using,保证AC


by 巨型方块 @ 2017-03-28 07:43:18

include<cstring>


by frankchenfu @ 2017-03-28 13:27:47

@KingLolierl 不是我说你,你自己用C++连C的常识都没有,你玩什么啊。puts是输出字符串的,gets是读入的,不知道比你的cin和cout高到哪里去了!


by frankchenfu @ 2017-03-28 13:30:36

using namespace std;又不是必须要加的;#include<cstring>就等于#include<string.h>(Cpp),而C只能用string.h


by Lolierl @ 2017-03-28 15:21:46

@frankchenfu

对不起,我不知道这是C

既然是C,你来指错吧


by 小白的白 @ 2017-03-28 16:37:28

@巨型方块

这个头文件是C++的么?


by 巨型方块 @ 2017-03-28 18:17:06

@小白的白 en


by 巨型方块 @ 2017-03-28 18:18:00

string是c++的东西

cstring是从c里面拷贝过来的


by 小白的白 @ 2017-03-28 22:11:57

谢谢大家了,已经解决了。原因是strrev属于非标准函数,部分编译器不予支持,只要再写一个反转字符串的自定义函数就行了。

#include<stdio.h>
#include<string.h>
void srev(char* str);//有一些网站的编译器不识别strrev函数,注意积累自写函数 
int main()
{
    char str[15],*p;
    p=str;
    scanf("%s",str); 
    if(str[0]=='-'){//如果是负数,指针向后移动一位,提前输出负号 
        p++;
        printf("-");
    }
    srev(p);//反转字符串 
    while(*p=='0')//找到第一个非零数 
    p++;
    if(*p=='0')//如果最后一位是零则指针后退一位 
    p--;
    puts(p);    
    return 0;
 } 
 void srev(char* str)
 {
     int i,len;
     char t;
     len=strlen(str);//注意数组下标从0开始 
     for(i=0;i < len/2; i++){
         t=str[i];
        str[i]=str[len-i-1];
         str[len-i-1]=t;
     }
}

| 下一页