当前位置: 首页 > news >正文

C语言和mfc按格式读取文件数据

fscanf()函数的功能是从文件中按格式读取一个或多个数据;

例如文件中有一行数据,

22 3.34 hello

则使用 fscanf(fp, "%d%f%s", &a, &f, str) 可一次读取整型、浮点、字符串三个数据;

此函数位于C标准库头文件<stdio.h>中;

示例;

测试文件如下;

代码; 

void CFiletest1View::OnDraw(CDC* pDC)
{CFiletest1Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereint a = 0;float f = 0;char str[100] = "";CString str1;int d=0;float f2=0;FILE* fp = fopen("test1.txt", "r");for(int i=0; i<3; i++){fscanf(fp, "%d%f%s", &a, &f, str);str1.Format("%d,%f,%s", a, f, str);pDC->TextOut(50, 50 + i*20, str1);d += a;    f2 += f;}str1.Format("整数和:%d", d);pDC->TextOut(50, 115, str1);str1.Format("浮点数和:%f", f2);pDC->TextOut(50, 135, str1);fclose(fp);
}

运行如下; 

在MFC中常常使用的是CStdioFile类;能否仍然可以使用fscanf()函数呢?

首先看一下,使用CStdioFile类打开文件后,返回的是BOOL类型,而fscanf需要一个FILE*类型;如果用C标准库函数fopen打开文件,返回的就是FILE*类型;

查一下MFC文档;

CStdioFile类有一个成员m_pStream,

CStdioFile::m_pStream
    m_pStream数据成员是指向一个打开文件的指针,该文件是由C运行时函数fopen返回的。如果文件从来没有被打开过或者已经被关闭了,则它是NULL。 

从文档说明这个m_pStream就是C标准库函数fopen打开文件后的返回值;

那么改为如下的代码看一下;

void CFiletest1View::OnDraw(CDC* pDC)
{CFiletest1Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereint a = 0;float f = 0;char str[100] = "";CString str1;int d=0;float f2=0;CStdioFile file;file.Open("test1.txt", CFile::modeRead);for(int i=0; i<3; i++){//根据字符类型读取txt文件中的数据fscanf(file.m_pStream, "%d%f%s", &a, &f, str);str1.Format("%d,%f,%s", a, f, str);pDC->TextOut(50, 50 + i*20, str1);d += a;    f2 += f;}str1.Format("整数和:%d", d);pDC->TextOut(50, 115, str1);str1.Format("浮点数和:%f", f2);pDC->TextOut(50, 135, str1);file.Close();
}

运行一下;没有问题,一样的;

http://www.lryc.cn/news/169072.html

相关文章:

  • SQLyog 各版本下载与安装(目前最新版本为13.2.0)
  • CopyOnWrite 容器
  • 云服务部署:AWS、Azure和GCP比较
  • Linux安装Ansible管理工具
  • 七天学会C语言-第二天(数据结构)
  • 高级功能的PID控制器在电离规等真空计线性化处理中的应用
  • 元素全排列问题的新思路(DFS,递归,计数器)
  • 机器学习 day35(决策树)
  • 小程序引入vant-Weapp保姆级教程及安装过程的问题解决
  • LeetCode 周赛上分之旅 #45 精妙的 O(lgn) 扫描算法与树上 DP 问题
  • JavaScript-DOM实战案例
  • STM32 学习笔记1:STM32简介
  • Hadoop-Hbase
  • 关于不停机发布新版本程序的方式
  • MeterSphere压测,出现HttpHostConnectException
  • cherry-pick
  • opencv形状目标检测
  • k8s中无法获取到nginx-ingress的客户端真实ip地址x-forwarded-for
  • MySQL(4)索引实践(2)
  • Kafka【命令行操作】
  • springboot配置注入增强(二)属性注入的原理
  • Android 使用Camera1实现相机预览、拍照、录像
  • 2024字节跳动校招面试真题汇总及其解答(四)
  • 网页的快捷方式打开自动全屏--Chrome、Firefox 浏览器相关设置
  • LabVIEW使用ModbusTCP协议构建分布式测量系统
  • unity学习第1天
  • Spring Boot实现对文件进行压缩下载
  • Mac专用投屏工具AirServer 7 .27 for Mac中文免费激活版
  • LabVIEW使用巴特沃兹低通滤波器过滤噪声
  • 【Realtek sdk-3.4.14b】RTL8197FH-VG和RTL8812F自适应认证失败问题分析及修改