为什么代码在vs上能跑但是pta上不行?

img

img


如题,一个普通的自定义函数,vs开头多的那个programm在pta上加过了还是编译错误。

从错误信息来看,PTA上面已经提供了main函数实现,你不需要自己再写一个main函数,只需要实现sign函数即可。

改成scanf_s试试吧
不断加悬赏啊,scanf_s行不行呢???

看编译输出

把那个 pragma 放在第一行
或者用这个 #define _CRT_SECURE_NO_WARNINGS 也是要放在第一行


//法一:把int sign(int p);放在main{}开头
#include<stdio.h>
int main()
{
   int sign(int p);
   int x;
   scanf("%d",&x);
   printf("sign(%d)=%d\n",x,sign(x));

}
int sign(int p){
    if(p>0)return 1;
    else if(p==0) return 0;
    else return -1;
}
 
//法二:把int sign(int p)函数放在main函数前面
#include<stdio.h>
int sign(int p){
    if(p>0)return 1;
    else if(p==0) return 0;
    else return -1;
}
int main()
{
   int x;
   scanf("%d",&x);
   printf("sign(%d)=%d\n",x,sign(x));

}

 

【为什么代码在vs上能跑但是pta上不行?】
思路1、pta的编译器是clang,scanf_s是ms自己搞的,不是标准库中的函数。建议你在windows上装个clang或者gcc(windows上是mingw64)

思路2、加宏开关来约束

#ifdef windows
    scanf_s(...);
#else
    scanf(...);
#endif