当printf打印尽可能多的行时,freopen只打印一行(C ++)

时间:2015-06-05 20:09:09

标签: c++ opengl 2d

所以我想将几行GL的Vertex2d坐标打印到一个文件中,我使用了这个:

{
   //namespace (for cout + cin)
   using namespace std;

   int p; //number of sides

   //body
   double r,d=3/4.0;

   cout << "input side count" <<endl;
   cin >> p;
   cout << "input radius" <<endl;
   cin >> r;

   FILE *fp;

   int i=0;
   double x,y,t;
   while(i<p)
   {
      t=2*M_PI*((double)i/p+d);
      x=cos(t)*r;
      y=sin(t)*r;

      if((fp=freopen("PTRON", "w" ,stdout))==NULL) {
         printf("Cannot open file.\n");
         exit(1);
      }

      printf("glVertex2d(%f, %f);\n",i,x,i,y);

      i++;
   }
   fclose(fp);
}

但它只在文件中打印了一行,看起来像这样;

glVertex2d(-0.406737,-0.913545);

在控制台中,它会打印所有行,如下所示:

glVertex2d(-0.406737, -0.913545);
glVertex2d(0.591057, -0.309017);
glVertex2d(0.587785, 0.80197);
glVertex2d(-0.687785, 0.809017);
etc.

为什么这样做?我需要他们所有人稍后将它们导入程序的OpenGL部分,以便绘制具有所需半径和边数的多边形

我知道它不应该是glVertex2d(0.0,0.0);但是有些东西,但是我没有达到重要的程度。

1 个答案:

答案 0 :(得分:0)

将以下行移到while循环之外。

  if((fp=freopen("PTRON", "w" ,stdout))==NULL) {
     printf("Cannot open file.\n");
     exit(1);
  }

我不知道在程序中多次使用它时freopen的行为是什么。

使用:

   if((fp=freopen("PTRON", "w" ,stdout))==NULL) {
      printf("Cannot open file.\n");
      exit(1);
   }

   while(i<p)
   {
      t=2*M_PI*((double)i/p+d);
      x=cos(t)*r;
      y=sin(t)*r;

      printf("glVertex2d(%f, %f);\n",i,x,i,y);

      i++;
   }