C++多个文本读取问题
2015-09-11 14:21
323 查看
同时使用两个 ifstream和 freopen 第二个就会失去效用,不知道错在了哪里!
1. 使用freopen打开:
2. 使用C格式的fopen打开
使用C语言是注意事项,int ret = fscanf(fp,"%lf", &ViewValue); lf 和f 有何不同之处?
3.修改后的代码,第一个使用freopen,第二个使用fopen可以正常运行了
1. 使用freopen打开:
bool CPicToolsDlg::readTxt2Seq( std::string TxtName, std::vector<float > &Seq ) { std::string TestTxt(TxtName); // freopen(TestTxt.c_str(),"r",stdin);// 打开文件! float ViewValue; Seq.resize(0); char ch; while(std::cin ) { std::cin >> ViewValue; Seq.push_back(ViewValue); } ///fin.close(); fclose(stdin); return true; }
2. 使用C格式的fopen打开
bool CPicToolsDlg::readTxt2Seq1( std::string TxtName, std::vector<float > &Seq ) { std::string TestTxt(TxtName); // FILE *fp = NULL; if ((fp = fopen(TestTxt.c_str(), "r")) == NULL){ printf("Error in open file %s\n", TestTxt.c_str()); return false; } else{ printf(" file opened%s\n", TestTxt.c_str()); } //三元组,使用三元组逐个写入 float ViewValue; Seq.resize(0); //char Temp[100]; //if (fin.is_open() ) //{ // fin.getline(Temp,100); // int i = 0; // while(i< 100 && Temp[i] !="\0" )//寻址级别不同,到底问题出在哪里了! // { // float ViewValue(Temp[i] ); // Seq.push_back(ViewValue); // ++ i; // } //} //流出现问题 //if (fin.is_open() ) { // while( fin.get(ch) )//寻址级别不同,到底问题出在哪里了! // { // if (ch !=(int)(" ") ){ // float ViewValue(ch ); // //fin >> ViewValue; //利用 重定向输入 浮点值 // //std::cin >>ViewValue2; // //std::cin >>ViewValue3; // //P.x = ViewValue; // //P.y = ViewValue2; // //P.z = ViewValue3; // Seq.push_back(ViewValue); // } // } //} while (!feof(fp))//首先读取点云数据到点表points同时指定点对应的id: { int ret = fscanf(fp,"%f", &ViewValue); Seq.push_back(ViewValue); }//printf("%d\n", n); fclose(fp); //fin.close(); //fclose(stdin); return true; }
使用C语言是注意事项,int ret = fscanf(fp,"%lf", &ViewValue); lf 和f 有何不同之处?
3.修改后的代码,第一个使用freopen,第二个使用fopen可以正常运行了
void CPicToolsDlg::OnBnClickedButtonKmptest() { //字符串匹配 //打开目录文件 CFileDialog FileDlg( TRUE, _T("*.pcd"), NULL, OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY, _T("*.txt|*.txt| *.pcd|*.pcd| All Files (*.*) |*.*||"), NULL);//选取约定! FileDlg.m_ofn.lpstrTitle = _T("打开待显示序列文本!!!"); // 打开文件对话框的标题名 if (FileDlg.DoModal() != IDOK) { MessageBox("打开文件失败!!!请重新检测", "提示", 0); return ; } CString FilePath = FileDlg.GetPathName(); std::string MyFileName = FilePath; std::vector<float > Seq(0); this->readTxt2Seq(MyFileName,Seq); CFileDialog FileDlg2( TRUE, _T("*.pcd"), NULL, OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY, _T("*.txt|*.txt| *.pcd|*.pcd| All Files (*.*) |*.*||"), NULL);//选取约定! FileDlg2.m_ofn.lpstrTitle = _T("打开待显示模式文本!!!"); // 打开文件对话框的标题名 if (FileDlg2.DoModal() != IDOK) { MessageBox("打开文件失败!!!请重新检测", "提示", 0); return ; } CString FilePath2 = FileDlg2.GetPathName(); std::string MyFileName2 = FilePath2; std::vector<float > P(0); this->readTxt2Seq1(MyFileName2,P); const std::vector<float> Pattern(P); int Pos = this->Kmptest(Seq ,Pattern ); }
相关文章推荐
- 【C++专题】static_cast, dynamic_cast, const_cast探讨
- 在64位机子调用vs编写的win32 c++程序遇到问题
- C++ <统计单词数及单个字母出现次数>
- [iOS学习]C语言:乘法表效果使用for循环输出
- 关于C语言中返回局部变量和局部指针变量
- C++11带来的优雅语法
- 如何在C++代码中连接QML代码中的信号
- c++ list, vector, map, set 区别与用法比较
- [转]关于C与C++中互相调用动态链接库的问题_卓越李子_新浪博客
- C++ 资源表
- 第二周项目1——c/c++语言中函数参数传递的三种方式
- Item 25:考虑实现一个不抛异常的swap Effective C++笔记
- C语言中auto,register,static,const,volatile的区别详细解析
- C++类模板的使用-排序
- C++ Primer的课后规划问题的第八章
- C语言程序变异的内存分配
- C++基础学习
- C++学习笔记1(带参数的main( )函数)
- Effective C++ 条款42 了解typename的双重意义
- C++数组名的思考