You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ifstream读取文件数值时始终返回0的问题求助

问题原因与修复方案

核心错误

问题出在printf格式占位符与变量类型不匹配:

  • 变量skippar是double类型,但你使用了%d(用于输出整数类型)来打印,这会导致内存数据被错误解析,最终输出不符合预期的0。

修复代码

将printf语句中的格式符改为%lf(或%f,两者在printf中均可用于输出double类型):

#include<fstream>
#include<cstdio> // 显式包含stdio.h以使用printf
int main(int npar, char** vpar) {
   std::ifstream parfile(vpar[1]);
   if (parfile.fail()) {
      printf("Problem opening file %s\n",vpar[1]);
      return 1;
   }
   double skippar;
   parfile>>skippar;
   printf("skippar=%lf\n",skippar); // 将%d替换为%lf
   parfile.close();
   return 0;
}

额外建议

如果使用C++编程,更推荐用std::cout替代printf,它会自动匹配变量类型,从根源避免这类格式符错误:

#include<fstream>
#include<iostream>
int main(int npar, char** vpar) {
   std::ifstream parfile(vpar[1]);
   if (parfile.fail()) {
      std::cerr << "Problem opening file " << vpar[1] << std::endl;
      return 1;
   }
   double skippar;
   parfile >> skippar;
   std::cout << "skippar=" << skippar << std::endl;
   parfile.close();
   return 0;
}

内容的提问来源于stack exchange,提问作者Dmitry Shtol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 14:00:54