求助玄学问题
查看原帖
求助玄学问题
942578
mOOOOONESY_hidden楼主2024/1/6 11:07

RT,本MnZn在造数据时发现标程 文件重定向后的输出和不文件重定向后的输出不同,文件重定向后甚至会出现缺少行数,代码是这样的

#include <bits/stdc++.h>
#define std_open(s) freopen((s+".in").c_str(),"r",stdin),freopen((s+".out").c_str(),"w",stdout);
#define std_ck if(argc<2){std::cerr<<"less arguments";return 1;}std_open(std::string(argv[1]))
using namespace std;
const int UP = 30 + 5;
double d[UP];
int main(int argc,char *argv[])
{    
    std_ck;//在cmd里输入 程序名.cpp test_1 即可实现打开test_1.in以及test_1.out,注释掉即可正常在控制台输入
    int n;
    double t;
    while(scanf("%d%lf", &n, &t) && n) {
        //省略
        printf("%.3f\n", d[0]);
    }
    return 0;
}

我使用这个标程造出数据后在洛谷上提交标程(去除了文件输入输出部分)也得了全WA。

后来我认为是输入的问题,将标程改为了

#include <bits/stdc++.h>
#define std_open(s) freopen((s+".in").c_str(),"r",stdin),freopen((s+".out").c_str(),"w",stdout);
#define std_ck if(argc<2){std::cerr<<"less arguments";return 1;}std_open(std::string(argv[1]))
using namespace std;
const int UP = 30 + 5;
double d[UP];
int main(int argc,char *argv[])
{
   std_ck;
   int n;
   double t;
   while(std::cin>>n>>t && n) {//这里改为了std::cin
       //省略
       printf("%.3lf\n",d[0]);//这里将.3f改为了.3lf
   }
   return 0;
}

再使用这个标程造出数据后在洛谷上提交标程,获得了70分,再修改两次数据后AC了。

不理解为什么会这样,是因为浮点数误差还是什么,如果是,为什么我改了之后也只有70分呢

2024/1/6 11:07
加载中...