.exe已停止使用VS C编译器

时间:2017-01-31 20:09:39

标签: c visual-studio-2008

我花了很长时间寻找答案,但我没有找到解决问题的方法。我是C的新手。

代码读取两个大型目录并比较它们之间的值,然后将各种结果写入多个数据文件。运行时间为5分钟到2小时,具体取决于目录。

这个问题是:程序在结束之前就会停止运行。我收到消息“filename.exe已停止工作”。我不认为这是一个scanf赋值问题,因为我的所有变量都是字符串。我使用-Wall选项进行编译,它编译得很好,我得到的唯一警告是“使用fopen_s”或“使用fscanf_s”,我听说这并不重要。当我检查输出文件时,它们比它们应该短1-3行,并在一行中途停止。我认为它可能与我的while循环中的EOF有关,但实际上我已经搞乱了很长时间,我无法理解它。

这不是我的代码,而是其他人发给我的代码,我必须重新使用。我正在使用VS Studio命令提示符进行编译。我用notepad ++编辑文件。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#define  ANG_DIST_LIMIT  100  /* arcsecond */ 

void main(void)

{

 FILE  *in1, *in2, *out1, *out2, *out_str, *out_str_mul, *out_non, *out_non_1 ;
  char   cid1[20], cx[18], cy[18], cz[18], cmag[5], cra[12], cde[12], 
         cpmr[12], cpmd[12], cpu[12], cme[6], ccolor[2], cid2[4], 
         cid0_[7], cid_[9], cra_[13], cde_[13], cmg_[6], cmf_[3] ;

  int    lrs_id, id_l, id_ist_n, id_gla_n, mfg_n, star_cnt  ;

  double ra_l, dec_l, mag_l, ra_n, dec_n, mag_n, mag_err,
         ra_diff, de_diff, de_sum, ang_dist, PI;



  in1 = fopen("filepath1.txt", "r") ;
  in2 = fopen("filepath2.cat", "r") ;

  out1 = fopen("filepath3.dat", "w") ;
  out2 = fopen("filepath4.dat", "w") ;
  out_str = fopen("filepath5.dat", "w") ;
  out_str_mul = fopen("filepath6.dat", "w") ;
  out_non = fopen("filepath7.dat", "w") ;
  out_non_1 = fopen("filepath8.dat", "w") ;
  PI = 3.141592653589 ;
  lrs_id = 0 ;


  // Read from first catalog until end of file
  while (fscanf(in1, "%s", cid1) != EOF)  
     {
     fscanf(in1, "%s %s %s %s %s %s %s %s %s %s %s %s",
           cx, cy, cz, cmag, cra, cde, cpmr, cpmd, cpu, cme, ccolor, cid2) ;
     lrs_id++ ;
     id_l = atoi(cid2) ;
     ra_l = atof(cra) ;
     dec_l = atof(cde) ;
     mag_l = atof(cmag) ;
     mag_err = atof(cme) ;

     star_cnt = 0 ;
    // For each item in catalog 1, find an item in catalog 2 that matches
     while ( fscanf(in2, "%s", cid0_) != EOF) 
        {
        fscanf(in2, "%s %s %s %s %s", cid_,  cra_, cde_, cmg_, cmf_) ;
        id_ist_n = atoi(cid0_) ;
        id_gla_n = atoi(cid_) ;
        ra_n  = atof(cra_) ;
        dec_n = atof(cde_) ;
        mag_n = atof(cmg_) ;
        mfg_n = atoi(cmf_) ;

        ra_diff = (ra_l - ra_n)/180.*PI ;
        de_diff = (dec_l - dec_n)/180.*PI ; 
        de_sum  = (dec_l + dec_n)/180.*PI ;
        ang_dist = sqrt(de_diff*de_diff +cos(de_sum/2.)*ra_diff*ra_diff)*180./PI ; 

        if (ang_dist < 1.0)
           fprintf(out1, "%5d %10.3f %12.8f %12.8f %12.8f %12.8f %5d\n", 
            lrs_id, ang_dist*3600.0, ra_l, dec_l, ra_n, dec_n, id_ist_n) ;
        if (ang_dist*3600.0 < ANG_DIST_LIMIT)
           {
           star_cnt++ ; 
           fprintf(out2, "%5d %8.3f %12.8f %12.8f %12.8f %12.8f %5d\n", 
            lrs_id, ang_dist*3600.0, ra_l, dec_l, ra_n, dec_n, id_ist_n) ;
           }
        } 

     if (star_cnt > 0) 
        {
        fprintf(out_str, "%4d %3d     %8.3f %8.3f %6.2f\n", 
             lrs_id, star_cnt, ra_l, dec_l, mag_l) ;
        if (star_cnt > 1) 
           fprintf(out_str_mul, "%4d %3d     %8.3f %8.3f %6.2f\n", 
            lrs_id, star_cnt, ra_l, dec_l, mag_l) ;
        }
     else 
        {
        fprintf(out_non, "%4d %3d     %8.3f %8.3f %6.2f\n", 
                 lrs_id, star_cnt, ra_l, dec_l, mag_l) ;
        fprintf(out_non_1, "%19s  %20.15f    %20.15f    %20.15f   %8.2f  %12.8f    %14.8f %14.8f %14.8f   %15.6f %7.4f %2d  %8d\n", 
       cid1, atof(cx), atof(cy), atof(cz), mag_l, ra_l, dec_l, atof(cpmr), atof(cpmd), atof(cpu), atof(cme), atoi(ccolor), id_l) ;
        }
     rewind (in2) ;
     } 

}

由于代码的性质,我不使用很多变量。

如果我没有得到一个明显的问题,我道歉。我已尽我所能,任何帮助都会受到赞赏。我会提供我遗漏的任何细节。

0 个答案:

没有答案