fprintf和fscanf函数

来源:互联网 发布:windows nc.exe 编辑:程序博客网 时间:2024/04/30 01:01

1、fprintf函数
fprintf函数的功能是和printf函数类似,传送格式化输出到一个流中;只不过fprintf函数的读写对象不是 终端 而是 磁盘文件。
函数原型:
fprintf(FILE * stream, const char * format, 输出表列);
int fprintf(FILE *stream, char *format[, argument,...]);
fprintf接受一串参数,用format指定的格式串中包含的格式说明符,分别作用在这些参数上,并将格式化数据输出到一个流上。
注意格式 说明符的格数 必须与 参数的格数 相同。(有多少%,后面就有多少参数)如果调用成功,将返回转换的字节数,失败时返回一个负数;

2、fscanf()函数
函数原型:int fscanf( FILE *stream,const char *format [,argument ]... );
作用:Read formatted data from a stream.(从流中 读取 格式化的数据)


例子:
#pragma warning(disable:4786)
#include "iostream.h"
#include <string>
using namespace std;
#include <map>
#define FALSE 0
std::map< std::string, int > g_mapNames;

int main()
{
 FILE *p = NULL;
        p = fopen(".//log.txt","a+");    //以a+方式打开一个文件,注意函数fopen的使用;
 if (p == NULL)
  return FALSE;
 char a[6] = "12345";
// int b = fprintf(p,"%s/n",a);     //fprintf函数如果调用成功,返回转换的字符数;这里是6,相当于sizeof(a)
 char a1[32] = "";
 char a2[32] = "";
 int m = 2;
 std::map< std::string, int > ::iterator iter;    //注意map声明迭代器的时候 要有iterator
 while( m == 2)
 {
  m = fscanf(p, "%s/t%s/n", a1,a2);    //往a1,a2里面拷贝字符串,返回的m是拷贝的个数,返回-1是拷贝失败;/t和/n是拷贝的终止符;
                                                     //也就是第一个字符串拷贝的时候以/t结束,第二个以/n结束,分别拷贝到a1 和 a2 中;
  if (m == 2)
  {
   int a22 = atoi(a2);          //atoi是把字符串转换成int类型,这里是把a2从字符串转换成int
   //printf("%s/n",a1);
   iter = g_mapNames.find(a1);  //字典的find方法,是查找字典中有没有key,有的话返回智能指针,没有的话指向end();
   if(iter != g_mapNames.end())
    g_mapNames[a1] += a22;
            else
    g_mapNames[a1] = a22;
  }
 }
 char mm[128] = "";

 while(1)
 {
  cin>>mm;
  iter = g_mapNames.find(mm);
  if( iter != g_mapNames.end())
  {
   printf("%s--%d/n",mm,g_mapNames[mm]);
  }
  else
   printf("Cannot find your need!/n");
 }
 //printf("%d/n",g_mapNames.size());
 fclose(p);
 p = NULL;
 return 0;
}

 

原创粉丝点击