同时使用两个 ifstream和 freopen 第二个就会失去效用,不知道错在了哪里!

1. 使用freopen打开:

  1. bool CPicToolsDlg::readTxt2Seq(
  2. std::string TxtName, std::vector<float > &Seq )
  3. {
  4. std::string TestTxt(TxtName); //
  5. freopen(TestTxt.c_str(),"r",stdin);// 打开文件!
  6. float ViewValue;
  7. Seq.resize(0);
  8. char ch;
  9.  
  10. while(std::cin )
  11. {
  12. std::cin >> ViewValue;
  13. Seq.push_back(ViewValue);
  14.  
  15. }
  16.  
  17. ///fin.close();
  18. fclose(stdin);
  19. return true;
  20. }

2. 使用C格式的fopen打开

  1. bool CPicToolsDlg::readTxt2Seq1(
  2. std::string TxtName, std::vector<float > &Seq )
  3. {
  4. std::string TestTxt(TxtName); //
  5.  
  6. FILE *fp = NULL;
  7. if ((fp = fopen(TestTxt.c_str(), "r")) == NULL){
  8. printf("Error in open file %s\n", TestTxt.c_str());
  9. return false;
  10. }
  11. else{
  12. printf(" file opened%s\n", TestTxt.c_str());
  13. }
  14.  
  15. //三元组,使用三元组逐个写入
  16. float ViewValue;
  17. Seq.resize(0);
  18.  
  19. //char Temp[100];
  20. //if (fin.is_open() )
  21. //{
  22. // fin.getline(Temp,100);
  23. // int i = 0;
  24. // while(i< 100 && Temp[i] !="\0" )//寻址级别不同,到底问题出在哪里了!
  25. // {
  26. // float ViewValue(Temp[i] );
  27. // Seq.push_back(ViewValue);
  28. // ++ i;
  29. // }
  30. //}
  31.  
  32. //流出现问题
  33. //if (fin.is_open() ) {
  34. // while( fin.get(ch) )//寻址级别不同,到底问题出在哪里了!
  35. // {
  36. // if (ch !=(int)(" ") ){
  37. // float ViewValue(ch );
  38. // //fin >> ViewValue; //利用 重定向输入 浮点值
  39. // //std::cin >>ViewValue2;
  40. // //std::cin >>ViewValue3;
  41. // //P.x = ViewValue;
  42. // //P.y = ViewValue2;
  43. // //P.z = ViewValue3;
  44. // Seq.push_back(ViewValue);
  45. // }
  46. // }
  47. //}
  48.  
  49. while (!feof(fp))//首先读取点云数据到点表points同时指定点对应的id:
  50. {
  51. int ret = fscanf(fp,"%f", &ViewValue);
  52. Seq.push_back(ViewValue);
  53. }//printf("%d\n", n);
  54.  
  55. fclose(fp);
  56. //fin.close();
  57. //fclose(stdin);
  58. return true;
  59. }

使用C语言是注意事项,int ret = fscanf(fp,"%lf", &ViewValue);   lf 和f 有何不同之处?

3.修改后的代码,第一个使用freopen,第二个使用fopen可以正常运行了

  1. void CPicToolsDlg::OnBnClickedButtonKmptest()
  2. {
  3. //字符串匹配
  4. //打开目录文件
  5. CFileDialog FileDlg(
  6. TRUE, _T("*.pcd"), NULL,
  7. OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY,
  8. _T("*.txt|*.txt| *.pcd|*.pcd| All Files (*.*) |*.*||"), NULL);//选取约定!
  9.  
  10. FileDlg.m_ofn.lpstrTitle = _T("打开待显示序列文本!!!"); // 打开文件对话框的标题名
  11.  
  12. if (FileDlg.DoModal() != IDOK) {
  13. MessageBox("打开文件失败!!!请重新检测", "提示", 0);
  14. return ;
  15. }
  16.  
  17. CString FilePath = FileDlg.GetPathName();
  18. std::string MyFileName = FilePath;
  19.  
  20. std::vector<float > Seq(0);
  21. this->readTxt2Seq(MyFileName,Seq);
  22.  
  23. CFileDialog FileDlg2(
  24. TRUE, _T("*.pcd"), NULL,
  25. OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY,
  26. _T("*.txt|*.txt| *.pcd|*.pcd| All Files (*.*) |*.*||"), NULL);//选取约定!
  27.  
  28. FileDlg2.m_ofn.lpstrTitle = _T("打开待显示模式文本!!!"); // 打开文件对话框的标题名
  29.  
  30. if (FileDlg2.DoModal() != IDOK) {
  31. MessageBox("打开文件失败!!!请重新检测", "提示", 0);
  32. return ;
  33. }
  34.  
  35. CString FilePath2 = FileDlg2.GetPathName();
  36. std::string MyFileName2 = FilePath2;
  37.  
  38. std::vector<float > P(0);
  39. this->readTxt2Seq1(MyFileName2,P);
  40.  
  41. const std::vector<float> Pattern(P);
  42.  
  43. int Pos =
  44. this->Kmptest(Seq ,Pattern );
  45.  
  46. }

C++多个文本读取问题的更多相关文章

  1. opencv从txt文本读取像素点并显示

    opencv从txt文本读取像素点并显示 文本储存格式为每行一个像素点,排列为RGB.每帧图像的帧头为65535.  如下图所示 废话不多说,代码如下: // #include <iostrea ...

  2. 批量文本读取URL获取正常访问且保留对应IP

    #coding=utf-8 import sys import requests for i in range(3000,4999,1): url = 'http://192.168.88.139:8 ...

  3. 接口测试工具-Jmeter使用笔记(六:从文本读取参数)

    使用场景:测试一个接口并发处理数据的能力,并且每次请求传入的参数都要不同. 解决方法--- CSV Data Set Config 列举一个实例,步骤中会侧重读取参数操作的说明,其他有疑问的步骤请查阅 ...

  4. 自动化测试-19.selenium定位之通过JS修改html写入日期数据以及从文本读取数据实战

    # -*- coding: utf-8 -*- from selenium import webdriver from selenium.webdriver.support.select import ...

  5. python3文本读取与写入常用代码

    创建文件夹: import os import shutil def buildfile(echkeyfile): if os.path.exists(echkeyfile): #创建前先判断是否存在 ...

  6. JAVA本地文本读取---解决中文乱码

    import java.io.*; public class ReadFile { public static void main(String[] args) { try { File file = ...

  7. 微信小程序-textarea中的文本读取以及换行问题

    今天客户那边要求textarea中输入的问题可以按回车键换行,而我使用的是bindinput获取值,但是呢bindinput 处理函数的返回值并不会反映到 textarea 上,按回车键导致点击换行符 ...

  8. java 文本读取 写入指定长度的内容

  9. ABAP读取长文本的方法

    SAP中所有的项目文本都存在以下两张数据表中: 1. STXH  抬头项目文本 透明表 2. STXL  明细项目文本   透明表 长文本读取方法 首先在STXH和STXL中根据OBJECT NAME ...

随机推荐

  1. NetworkManager

    网络管理器(NetworManager)是检测网络.自动连接网络的程序.无论是无线还是有线连接,它都可以令您轻松管理.对于无线网络,网络管理器优先连接已知的网络并可以自动切换到最可靠的无线网络.利用网 ...

  2. oracle 增量导出/导入

    一.   导出/导入(Export/Import) ----   利用Export可将数据从数据库中提取出来,利用Import则可将提取出来的数据送回Oracle数据库中去. ----   1.   ...

  3. [HDU3518]Boring counting(后缀数组)

    传送门 求出现超过1次的不重叠子串的个数 根据论文中的方法. 枚举子串的长度 k. 用 k 给 height 数组分组,每一组求解,看看当前组的位置最靠后的后缀和位置最靠前的后缀所差个数是否大于长度, ...

  4. 配置sublime text 前端环境

    SublimeLinter是Sublime的一个代码检测工具插件.安装前台是配置好node环境 1,在sublime text安装 SublimeLinter 按下 Ctrl+Shift+p 进入 C ...

  5. 搭建strom 的开发环境 - local mode

    Setting Up a Development Environment This page outlines what you need to do to get a Storm developme ...

  6. VC ON_CONTROL_RANGE多个控件响应一个方法

    步骤/方法 分三个步骤 在头文件里声明函数比如 afx_msg void onNum(UINT uID) 在.cpp文件里加入函数体 void CCalculatorDlg::OnNum(UINT u ...

  7. 通过loosejar清理应用中冗余的jar包

    随着应用规模的逐渐增大,依赖的jar包数量也大幅添加.当中不乏多余的,用不到的jar包,占用了大量的宝贵空间.通过loosejar这个工具.便可轻松找到"滥竽充数"的jar包了~ ...

  8. crmjs区分窗口是否是高速编辑(2)

    随着crm的版本号不同,有些功能不能使用,这里提供了第二种写法: function loadFrom() {     var formType = Xrm.Page.ui.getFormType(); ...

  9. gradle打包android (实现外部导入签名文件、多渠道打包、导入ant脚本)

    近期一直在做android自己主动打包,之前已经完毕了用纯命令行的形式打包.原生态ant脚本打包.和基于android的SDK的打包.而且实现了多渠道打包,后来同事推荐了gradle,网上的资料说gr ...

  10. JS0基础学习笔记(1)

    为了须要,最近開始学习JS相关知识.基本的方式是通过看视频以及查阅相关手冊.并动手实践,亲手写出每一个小案例,以下是相关代码(每一个案例用分隔线隔开). <!DOCTYPE html> & ...