cout

进程间通信二:管道技术之输入输出重定向

。_饼干妹妹 提交于 2020-01-26 06:10:23
转载自: http://blog.csdn.net/morewindows/article/details/7390350 本篇将介绍 输入输出的重定向问题, 先来看一个小小的实例,设有一个程序,该程序的输入输出为标准输入输出即从键盘上输入,输出到屏幕。现在要重定向输入法输出,使程序从文件中读取数据,处理后输出到文件。程序代码如下(称此程序为示例程序): [cpp] view plain copy #include <stdio.h> int main() { int n; while (scanf( "%d" , &n) != EOF) //标准输入时,可按ctrl+z来输入EOF { n *= 2; printf( "%d\n" , n); } } 试给出几种不同的实现方法,另外如果没有程序代码,只有可执行文件,又应该如何做了? 实现方法一使用C语言的freopen()函数 函数功能:重定向控制台的输入输出 函数原型: FILE * freopen ( const char * path , const char * mode , FILE * stream ); 函数说明: 第一个参数为文件指针(也可以用来指向标准输入输出)。 第二个参数为打开方式, "w" 表示 写, "r" 表示 读, "a" 表示 追加。其它设置可以参考 MSDN 。 第三个参数为 FILE 类型的指针

学C++遇到的问题

萝らか妹 提交于 2020-01-25 20:42:13
学C++遇到的问题 1月12日问题(黑窗口不停留问题) 今天开始了我的学习C++之路,在C++ Primer Plus这本书中我遇到了一个小问题,照着书上的代码敲在了VC2010上,编译执行的结构窗口不会停下来,就是程序执行完后黑窗口随即关闭,看不见结果。书上有说明,如出现此情况在return 0前加上 cout << "Press any key to continue." <<endl; cin.get(); 但是加上后还是同样黑窗口只是闪一下就没有了。 源码如下(没改之前,改的话就把那两行注释符号去掉即可):`// myfirst.cpp–displays a message #include // a PREPROCESSOR directive int main() // function header { // start of function body using namespace std; // make definitions visible cout << “Come up and C++ me some time.”; // message cout << endl; // start a new line cout << “You won’t regret it!” << endl; // more output // If the output

C++课程学习笔记第四周:运算符的重载

六眼飞鱼酱① 提交于 2020-01-25 17:55:12
1 运算符重载基本概念和形式 1.1 运算符重载基本概念 在数学上,两个复数可以直接进行+、-等运算。但在C++中,直接将+或-用于复数对象是不允许的,因为C++中预定义的运算符并未提供这种功能。 为了让对象也能通过运算符进行运算(这样代码更简洁,容易理解),C++提供了运算符重载的机制。 运算符重载的含义:对已有的运算符(C++中预定义的运算符)赋予多重的含义,使同一运算符作用于不同类型的数据时导致不同类型的行为。比如 5 + 4 = 9; complex_a + complex_b 生成新的复数对象。 运算符重载的目的:扩展C++中提供的运算符的适用范围,使之能作用于对象。 1.2 运算符重载的形式 返回值类型 operator 运算符(形参表){ …… } 运算符重载的实质是函数重载; 把含运算符的表达式转换成对运算符函数的调用,把运算符的操作数转换成运算符函数的参数; 运算符被多次重载时,根据实参的类型决定调用哪个运算符函数。 可以重载为普通函数,也可以重载为成员函数; 重载为成员函数时,参数个数为运算符目数减一;重载为普通函数时参数个数为运算符目数。 //示例 class Complex{ public: double real,imag; Complex( double r = 0.0, double i= 0.0 ):real(r),imag(i) { }

OpenJudge 2803 碎纸机 / Poj 1416 Shredding Company

懵懂的女人 提交于 2020-01-25 08:52:02
1.链接地址: http://poj.org/problem?id=1416 http://bailian.openjudge.cn/practice/2803 2.题目: 总时间限制: 1000ms 内存限制: 65536kB 描述 你现在负责设计一种新式的碎纸机。一般的碎纸机会把纸切成小片,变得难以阅读。而你设计的新式的碎纸机有以下的特点: 1.每次切割之前,先要给定碎纸机一个目标数,而且在每张被送入碎纸机的纸片上也需要包含一个数。 2.碎纸机切出的每个纸片上都包括一个数。 3.要求切出的每个纸片上的数的和要不大于目标数而且与目标数最接近。 举 一个例子,如下图,假设目标数是50,输入纸片上的数是12346。碎纸机会把纸片切成4块,分别包含1,2,34和6。这样这些数的和是43 (= 1 + 2 + 34 + 6),这是所有的分割方式中,不超过50,而又最接近50的分割方式。又比如,分割成1,23,4和6是不正确的,因为这样的总和是34 (= 1 + 23 + 4 + 6),比刚才得到的结果43小。分割成12,34和6也是不正确的,因为这时的总和是52 (= 12 + 34 + 6),超过了50。 还有三个特别的规则: 1.如果目标数和输入纸片上的数相同,那么纸片不进行切割。 2.如果不论怎样切割,分割得到的纸片上数的和都大于目标数,那么打印机显示错误信息。 3

Linux下监控文件系统

前提是你 提交于 2020-01-24 13:53:59
Linux下监控文件系统 Linux的后台程序通常在机器没有问题的情况下,需要长期运行(比如说数个月,甚至是数年)。但是,程序的配置文件有时候是需要定期作调整。为了不影响程序对外服务(不重启),动态加载配置文件是一种非常常见的需求。通过监控某个文件的创建、删除和修改等事件,可以很方便做出对应的动作(比如说reload)。 1. Linux下监控文件系统的常用方法 监控配置文件或配置文件目录的变化,一种可行的方法是程序启动的时候记录下文件(或目录)的修改时间,周期性检查(比如说一秒一次)文件是否已经被修改,来决定是否需要重新加载配置文件。 另一种更为优雅的办法是使用Linux系统从内核层面支持的系统API dnotify、inotify或者fanotify。inotify API提供一个文件描述符,可以在该文件描述符上注册对指定的文件或者目录的文件系统事件(文件删除、文件修改和文件创建),然后通过read系统调用读取该文件描述法上的事件。 2. 使用stat或fstat监控Linux文件系统 通过周期性地获取被监控文件的状态,stat和fstat可以帮助用户监控指定文件的状态。 int stat(const char *path, struct stat *buf); int fstat(int fd, struct stat *buf); struct stat { dev_t

cout 二进制输出

岁酱吖の 提交于 2020-01-24 10:28:27
1.cout不支持输出二进制,只支持八进制、十进制、十六进制输出,想输出二进制需要用到bitset 2.每次使用oct、dec、hex之后会将默认输出形式分别改为八进制、十进制、十六进制,而使用 bitset输出二进制后则不会改变 代码如下: 1 #include <iostream> 2 #include <vector> 3 #include <ctime> 4 #include <cstdlib> 5 #include <cstring> 6 #include <bitset> 7 8 int main() 9 { 10 using namespace std; 11 12 //二进制输出 13 cout << bitset<sizeof(unsigned long) * 8>(1UL << 27) << endl; 14 15 cout << (1UL << 27) <<endl; 16 17 //八进制输出 18 cout << oct << (1UL << 27) << endl; 19 20 cout << (1UL << 27) <<endl; 21 22 //十六进制输出 23 cout << hex << (1UL << 27) <<endl; 24 25 cout << (1UL << 27) <<endl; 26 27 //十进制输出 28 cout <<

c++ namespce命令空间用法

我们两清 提交于 2020-01-24 07:14:55
一、为什么使用命名空间 考虑一种情况,当我们有两个同名的人,Zara,在同一个班里。当我们需要对它们进行区分我们必须使用一些额外的信息和它们的名字,比如这个区域,如果它们生活在不同的区域或者它们的母亲或父亲的名字,等等。 在您的C++应用程序中也会出现同样的情况。例如,您可能正在编写一些具有名为xyz()函数的代码,并且还有另一个可用的库,它也具有相同的xyz()函数。现在编译器无法知道您在代码中引用的xyz()函数的哪个版本。 名称空间(namespace)被设计来克服这个困难,并被用作额外的信息来区分类似的函数、类、变量等等,它们在不同的库中具有相同的名称。使用名称空间,您可以定义定义名称的上下文。本质上,名称空间定义了一个范围。 二、命名空间的定义 在C语言中只有一个全局作用域: 1.C语言中所有的全局标识符共享一个作用域 2.标识符之间可能发生冲突 C++中提出了命名空间的概念: 1.命名空间将全局作用域分成不同的部分, 2.不同命名空间中的标识符可以同名而不会发生冲突 3.命名空间可以发生嵌套 4.全局作用域也叫默认命名空间 语法: namespace Name { namespace Internal { /*...*/ } /*...*/ } C++命名空间的使用: 使用整个命名空间:using namespace name; 使用命名空间中的变量:using

[收藏]C++简单五子棋

自古美人都是妖i 提交于 2020-01-24 06:09:10
1 #include<iostream> 2 #include<iomanip> 3 using namespace std; 4 5 const int X = 21; //棋盘行数 6 const int Y = 21; //棋盘列数 7 char p[X][Y]; //定义棋盘 8 int m = 0;//定义临时点,保存输入坐标 9 int n = 0; 10 11 void display() //输出棋盘 12 { 13 for (int i = 0; i < X; i++) 14 cout << setw(3) << setfill(' ') << i; 15 cout << endl; 16 for ( int i = 1; i < Y; i++) 17 { 18 cout << setw(3) << setfill(' ') << i; 19 for (int j = 1; j < X; j++) 20 cout << setw(3) << setfill(' ') << p[i][j]; 21 cout << endl; 22 } 23 24 } 25 26 void black() //黑方落子 27 { 28 cout << "请黑方输入落子位置:\n" 29 << "请输入落子的行数:"; 30 cin >> m; 31 cout << "请输入落子的列数

C++的cout高阶格式化操作

眉间皱痕 提交于 2020-01-24 04:51:58
(敬告:当您的浏览器以非默认字体浏览本文时,段落格式可能会出现偏差) 这篇文章主要讲解如何在C++中使用cout进行高级的格式化输出操作,包括数字的各种计数法(精度)输出,左或右对齐,大小写等等。通过本文,您可以完全脱离scanf/printf,仅使用cout来完成一切需要的格式化输入输出功能(从非性能的角度而言)。更进一步而言,您还可以在<sstream>、<fstream>上使用这些格式化操作,从而代替sprintf和fprintf函数。为方便描述,下文仅以cout为例进行介绍。 一、综述 cout是STL库提供的一个iostream实例,拥有ios_base基类的全部函数和成员数据。进行格式化操作可以直接利用setf/unsetf函数和flags函数。cout维护一个当前的格式状态,setf/unsetf函数是在当前的格式状态上追加或删除指定的格式,而flags则是将当前格式状态全部替换为指定的格式。cout为这个函数提供了如下参数(可选格式): ios::dec 以10进制表示整数 ios::hex 以16进制表示整数 ios::oct 以8进制表示整数 ios::showbase 为整数添加一个表示其进制的前缀 ios::internal 在符号位和数值的中间插入需要数量的填充字符以使串两端对齐 ios::left 在串的末尾插入填充字符以使串居左对齐 ios:

C++学习笔记第三天:类、虚函数、双冒号

断了今生、忘了曾经 提交于 2020-01-23 09:16:36
类 class Box { public: double length; // 盒子的长度 double breadth; // 盒子的宽度 double height; // 盒子的高度 }; 类成员的作用域: public:公共成员。访问权限:外部、子类、本身 protected:受保护成员。访问权限:子类、本身 private:私有成员。访问权限:本身 构造函数 跟其他语言一样,使用类名作为函数名,无返回值,可以有参数。 #include <iostream> using namespace std; class Line { public: void setLength( double len ); double getLength( void ); Line(); // 这是构造函数 private: double length; }; // 成员函数定义,包括构造函数 Line::Line(void) { cout << "Object is being created" << endl; } void Line::setLength( double len ) { length = len; } double Line::getLength( void ) { return length; } // 程序的主函数 int main( ) { Line line; //