使用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
相关产品推荐
相关产品推荐

