qlearner的个人博客分享 http://blog.sciencenet.cn/u/qlearner

博文

编程知识 专贴

已有 3432 次阅读 2012-9-26 10:46 |个人分类:编程学习|系统分类:科研笔记| C语言, 程序, 源文件

C++在指定文件夹下实时输出数据,并根据时间为输出文件命
1、把整型数据转换为字符型,从而可在文件名应用。
C++中也有类似于C语言的sprintf的函数,即stringstream类。它可将计数变量等的数值变成字符型数值,从而可以用在文件的命名上,实现实时输出数据,并改名。
经典实例:转自csdn博客的一条回复
http://topic.csdn.net/u/20080523/05/f55b68ee-a594-4933-82ae-87beb143c2d9.html
#include "iostream"
#include "string"
#include "sstream"
using namespace std;
void main()
{
  string a("12+");
  string b("12");
  int d=24;
  string c;
  string e;
  ostringstream ost(e);
  ost<<d;
  c=a+b+"="+ost.str();
  cout<<c<<endl;
}
2、真正输出文件时可添加如下代码:
  fstream outfile;
  string fullname,partname;
  ostringstream ost(partname);
  ost<<i;
  fullname="u_h_"+ost.str()+".dx";
  outfile.open(fullname.c_str(),ios::out);
  outfile.close();
3、上述输出的文件与当前程序在同一个文件夹下,不易归档查看,可设定在指定文件夹下批量输出文件,此时可以把文件名与路径结合,添加代码如下:
   system("mkdir  ./a");//由系统建立文件夹,可以用绝对路径或相对路径
  fullname="./a/"+fullname;

随机数的产生:
随机数的产生由以下代码实现:(http://www.cnblogs.com/bingcaihuang/archive/2011/03/12/1982181.html)

srand(time(NULL));

之后调用rand()即可得到0 ~ 32757范围的随机数

包含头文件stdlib.h和time.h 或 cstdlib和ctime

#include <stdlib.h>

#include <time.h>

#include <cstdlib>

#include <ctime>

用下列公式即可得到指定范围[m,n]的随机数:

r = rand()%(n - m + 1) + m;

注意:n - m 的绝对值不能超过32767

但是如果要产生这期间的随机小数,还要加上小数部分:

r=rand()%(n-m)+m+(float)(rand()%10000)/10000;

如果要产生0-1之间的随机数:

可以用cout < <(double)rand()/RAND_MAX;

还有几个注意点:
(1)srand()函数是初始化随机数产生器,它产生随机数种子,说白了就是初始化随机数。 srand((unsigned)time(0));取的是系统时间,也就是距离1970.1.1午夜有多少秒。 而for循环每循环一次时间远远小于1秒,这就导致了srand((unsigned)time(0))产生的种子并没有改变。 那么,相同的随机数种子所产生的随机数肯定是一样的了。
(http://zhidao.baidu.com/question/104430435.html)
故要把srand()函数放在for循环之外。
(2)如果不用srand,则今天和明天产生的随机数是相同的。

注意编程中的取商运算
两个int型相除取商,还是int型,可能就会造成误差很大,或者直接就是0的情况。注意强制类型转换。

类的成员函数的声明和定义后面加const与不加const的区别:
加const表示成员函数可以对const对象进行操作,但是不能改变数据成员的内容。
举例:http://bbs.csdn.net/topics/60366514
#include<iostream>
using namespace std;
class A{
  int data;
public:
  A(int da=100):data(da){}
  void display1(){cout<<data<<endl;}
  void display2() const {cout<<data<<endl;}
  void display3() const
  {  
     data+=100;
     cout<<data<<endl;
  }
};
int main()
{
    A a1;
    const A a2;
    a1.display1();
    a1.display2();  
    a1.dispaly3();   //error ,const声明的成员函数不能改变数据成员的值
    a2.display1();   //error ,const对象不能调用非const函数
    a2.display2();   //right
    a2.display3();   //error ,const对象能调用const函数,但是该函数不能改变数据成员值
    system("Pause");
    return 0;
}


https://blog.sciencenet.cn/blog-441611-616841.html

上一篇:AFEPack 基础知识
下一篇:枝晶生长是一个非线性的复杂自组织过程
收藏 IP: 210.72.136.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-18 14:44

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部