通过Microsoft C ++获得有用的NaN和Inf治疗

时间:2011-10-24 12:49:02

标签: visual-c++ printf scanf stdio nan

考虑以下测试程序

#include <iostream>
#include <stdio.h>
using namespace std;

 int main(int argc, char* argv[])
{
double a=1,c=0;
double i = a/c;   // divide by 0 yields infinity
double j = a*4.5;
double k = c/c;  // 0 divide 0 yields NaN
FILE * fp = fopen("ttt.txt","wt");
fprintf(fp,"%f\t%f\t%f\t",i,j,k);
fclose(fp);

double aa,bb,cc;
fp = fopen("ttt.txt","rt");
fscanf(fp,"%lf%lf%lf",&aa,&bb,&cc);
cout<<aa<<endl<<bb<<endl<<cc<<endl;
}   

使用gcc编译时(我尝试过的任何平台) 使用内容

创建一个文件ttt.txt

Inf 4.500000 NaN

给出输出

Inf文件
4.5
为NaN

那里没有惊喜。根据C99的规则进行正确的行为,以及像Matlab这样的事情

在Microsoft Visual Studio 2008下编译相同的程序会产生一个带有内容

的文件ttt.txt

1.#INF00 4.500000 -1。#IND00

并给出输出

1
-9.25596e + 061
-9.25596e + 061

这样微软C甚至无法读取它自己对Inf和NaN的描述,更不用说标准的那些,这完全是无用的 - 为什么他们以这种方式实现它完全超出我的范围。 我知道MSVcc并不完全符合C99 - 但是有没有人有任何关于如何说服它来读写这些值,编译器开关,stdio.h的另一个版本,任何东西的建议。

似乎唯一的办法是实现我自己的函数来替换fscanf和fprintf,但这似乎重新发明了轮子。我不敢相信我是第一个发现这个令人讨厌的人 - 让微软的stdio库变得毫无用处,然而谷歌却没有提出这个问题

0 个答案:

没有答案