C++ 标准输出cout与printf】的更多相关文章

C++标准输出cout与printf都可以,printf用法更死板一些. #include <iostream> int main(int argc, char** argv) { using namespace std; #普通输出 cout<<"This is cout"<<endl; printf("This is printf\n"); #如果要输出字符串,则printf记得加上c_str(),把std:string转成c…
禁止std::cout和printf混用,在多线程环境下可能导致coredump. 说明:printf和std::cout分别为标准c语言与c++中的函数,两者的缓冲区机制不同(printf无缓冲区,而std::cout有),而且对于标准输出的加锁时机也略不同: (1)printf:在对标准输出作任何处理前先加锁. (2)std::cout:在实际向标准输出打印时方才加锁. 两者存在微弱的时序差别,而多线程环境下,很多问题就是由于微弱的时序差别造成的.所以两者的混用很容易带来不可预知的错误,常见…
1.两者的缓存机制不同:printf无缓冲区,而std::cout有 (其实printf也是有缓冲区的,https://blog.csdn.net/ithzhang/article/details/6875176) 2.对于标准输出的加锁时机不同:printf在对标准输出作任何处理前先加锁:std::out在实际向标准输出打印时才加锁 3.二者存在微弱的时序差别,而在多线程环境下,很多问题就是由于微弱的时序差别造成的.所以两者混用很容易带来不可预知的错误,常见的错误有打印输出的结果不符合预期,而…
在多线程的设计模式下,如果多个线程都使用cout打印信息,那么很容易出现内容交替的现象,例如下图: 代码如下: 如果把cout替换成printf,那么就不会出现这个问题,运行结果如下图: 对应代码如下: 上网搜索了下相关的内容,部分网友反馈结果是: cout不是线程安全的,要靠自己去线程同步,比较麻烦 .printf是线程安全的,也就是自己做了线程同步的处理. 这个结果有待继续考证,暂且记在这. 发现一篇对IOstream解释得比较好的文章,有一定的参考价值:http://www.cnblogs…
作为一个嵌入式开发的猿,使用打印调试程序是必不可少的,拿到新的项目第一件事就是捣鼓打印.这次也不例外有打印才有耍下去的底气.在之前零零碎碎的C++学习中,还是一边学一边做项目的状态下能用printf解决那么专门学习“打印”是不存在的,今儿一看C++的cout 真心好用,6的一批.不好好玩玩对不起C++. cout: Cout 是ostream 类的一个对象,声明在iostream 文件中,属于std名字空间. 综上,想要使用cout需要在程序中包含 iostream,作用类似C语言的头文件,为了…
http://blog.csdn.net/l2580258/article/details/51319387 void cin_read_nosync() { freopen("data.txt","r",stdin); std::ios::sync_with_stdio(false); for (int i=0;i<MAXN;i++) std::cin >> numbers[i]; }…
之前上传UVa227 puzzle时,好不容易AC了,但发现自己用时50(ms),而在VJ上看到人家都是40ms.20ms,于是打开一个20ms的代码查看人家强在哪里.但结果研究了半天感觉差不多,于是想着应该不是算法的问题.然后又想到,网上提交的答案,大家都是用scanf和printf写的,而我用的cin cout,而这题的确需要大量的输入输出,于是就想着把所有cin cout改成scanf printf.结果 -.- 上面c++版,下面c版. 于是我很好奇C的输入输出方法和C++提倡的方法为什…
From:http://www.cnblogs.com/killerlegend/p/3918452.html Author:KillerLegend Date:2014.8.17 杭电OJ之3233很简单的一个问题,谁知道一直提示我超时,超时,最后都快哭了,C++代码如下: #include <iostream> #include <iomanip> using namespace std; int main() { ; while(cin>>t>>tmp…
我们在c++ 中使用cin cout很方便但速度很慢,导致有些题目用cin就超时而用scanf则就ac了,那到底改用谁? cin慢是有原因的,其实默认的时候,cin与stdin总是保持同步的,也就是说这两种方法可以混用,而不必担心文件指针混乱,同时cout和stdout也一样,两者混用不会输出顺序错乱.正因为这个兼容性的特性,导致cin有许多额外的开销,如何禁用这个特性呢?只需一个语句std::ios::sync_with_stdio(false);,这样就可以取消cin于stdin的同步了.…
现在群里在讨论cout和printf那个快的问题,但我个人觉得printf好: 因为:printf对于一些数据大,以及保留小数位,字符……可以显示出明显的优势如“%s %d %c…………” 虽然printf格式过于复杂,但比起cout…………还是printf好,不容易TLE!!! 如果非要用cout那就必须加一个std(其实也好不到哪去!!!)如std::cout<<"……": 下面就来做一个小小的测试来验证: 打开DEV: 是不是printf快呢???…
[前言]二者的区别就不介绍了.二者使用方法: printf("%s",a); cout<<a<<endl; endl的作用是什么? 一.endl作用 众所周知,endl有一个换行的作用,第二个作用就是清空缓冲区buffer. 为什么要清空缓冲区呢? 首先思考缓冲区存在的作用,缓冲区的作用一是为了避免频繁的I/O操作对磁盘的损耗,二是减少存取时的函数调用的损耗.所以,c++里面的缓冲区意义是非常大的,注意printf是没有缓冲区的. 我们上面即使没有加上endl,…
原地址:http://blog.csdn.net/thunders01/article/details/38879553 刚刚被坑完,OI一年了才知道%I64和%lld有区别(做题会不会太少),long long真的要注意 --------------------------------------------原博------------------------------------------- 在C/C++中,64为整型一直是一种没有确定规范的数据类型.现今主流的编译器中,对64为整型的支…
当用cout 或者 printf()对char 或者 unsigned char类型数据进行输出的时候,默认输出的都是字符,而不是字符对应的数值.如果要输出数值,必须做int 类型数据的强制转换. 例如: cout<< imgInput.at<uchar>(i,j)<<","; 其中imgInput为Mat类型的图像数据.其输出为: 当输出语句改为: cout<<(int) imgInput.at<uchar>(i,j)<…
------------------------------------------------------------------------------------------- [cut命令] cut [选项] 文件 -f 列号        ( --field 提取第几列 ) -d 分隔符    ( --delimiter 按照指定分隔符分割列 ) vi user.txt ( 行间分隔符为制表符Tab,cut的默认分割符是制表符 ) 提取系统的用户名和uid: cut -d ":&quo…
VC中头文件为:#include <iostream.h> 这个在c中没有.是C++引进的. cout<头文件#include中printf()类似. 只是不需要标明数据类型. endl就是end of line的意思. honly:为避免ElemType的类型变化的影响,用cout取代printf().注意结尾要加endl. 比如ElemTypede的类型发生变化,相应的printf()中的输出格式控制符必须进行相应的改变,否则会发生错误,因此用cout输出. 1.\n与endl区别在…
参考 : http://upliu.net/how-cout-out-2-precision.html 大家都知道用 C 语言中 printf () 函数可以非常方便控制保留 几位小数输出 不过在 C++ 当中也是可以控制小数保留,cout () 和 printf () 还是有一些区别 cout<<setiosflags(ios::fixed)<<setprecision(2);//需要头文件#include <iomanip> 然后再输出实数类型变量即可以保留2位小数…
参考: http://www.cnblogs.com/wushuaiyi/p/4439361.html http://blog.csdn.net/edricbjtu/article/details/41082597 C 语言中 printf () 函数可以非常方便控制保留 几位小数输出,在 C++ 当中也是可以控制小数保留,cout () 和 printf () 还是有一些区别. 需要头文件#include <iomanip> setprecision()来用来保存有效数字,fixed和set…
原文链接 1: fprintf()#include <stdio.h> int fprintf( FILE *stream, const char *format, ... );fprintf()函数根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件.因此fprintf()可以使得信息输出到指定的文件.比如    char name[20] = "Mary";    FILE *out;    out = fopen( "output.…
printf命令格式化并输出结果到标准输出. 语法 printf(选项)(参数) --help:在线帮助: --version:显示版本信息. 参数 输出格式:指定数据输出时的格式: 输出字符串:指定要输出的数据. 格式替代符 %b 相对应的参数被视为含有要被处理的转义序列之字符串. %c ASCII字符.显示相对应参数的第一个字符 %d, %i 十进制整数 %e, %E, %f 浮点格式 %g %e或%f转换,看哪一个较短,则删除结尾的零 %G %E或%f转换,看哪一个较短,则删除结尾的零 %…
一.问题 c++代码: #include <iostream> #include <stdio.h> using namespace std; int main(){ ; cout<<a++<< a=; cout<<a<< a=; printf( a=; printf( } java代码: public class Test{ public static void main(String[] args){ int a=1; Syste…
在比赛里,经常出现数据集超大造成 cin TLE的情况.这时候大部分人(包括原来我也是)认为这是cin的效率不及scanf的错,甚至还上升到C语言和C++语言的执行效率层面的无聊争论.其实像上文所说,这只是C++为了兼容而采取的保守措施.我们可以在IO之前将stdio解除绑定,这样做了之后要注意不要同时混用cout和printf之类. 在默认的情况下cin绑定的是cout,每次执行 << 操作符的时候都要调用flush,这样会增加IO负担.可以通过tie(0)(0表示NULL)来解除cin与c…
在C/C++中,64为整型一直是一种没有确定规范的数据类型.现今主流的编译器中,对64为整型的支持也是标准不一,形态各异.一般来说,64位整型的定义方式有long long和__int64两种(VC还支持_int64),而输出到标准输出方式有printf(“%lld”,a),printf(“%I64d”,a),和cout << a三种方式. 本文讨论的是五种常用的C/C++编译器对64位整型的支持,这五种编译器分别是gcc(mingw32),g++(mingw32),gcc(linux i38…
基本思路:(参考大神和加自己的思考) 考虑到此题需要输入这么大的数a,并且还的求aa,求出来会更大,更多位.当时考虑用大数方法求(数组实现),结果实现不行.看网上大神采用对数法,巧妙避开处理这么大的数. 这就是数学的魅力!! 假如aa=b,两边同时取对数alog10a=log10b,从而有b=10alog10a.现在我们关注点在10alog10a,先举例:一个数2310,这个数,换成10c次幂,这里的c=3.xxxxx.如果把他取整一定为3,103是最大的权值,那剩下的100.xxxxx取整之后…
//为了和DSP兼容,TSint64和TUint64设置成TSint40和TUint40一样的数 //结果VC中还是认为是32位的,显然不合适 //typedef signed long int     TSint64; //typedef unsigned long int   TUint64; //ANSI C中规定long long才能表示64位 //参见:http://msdn.microsoft.com/en-us/library/s3f49ktz.aspx //可惜VC++ 6.0 …
Microsoft Visual C++ 不支持long long 在C/C++中,64为整型一直是一种没有确定规范的数据类型.现今主流的编译器中,对64为整型的支持也是标准不一,形态各异.一般来说,64位整型的定义方式有long long和__int64两种(VC还支持_int64),而输出到标准输出方式有printf(“%lld”,a),printf(“%I64d”,a),和cout << a三种方式. 本文讨论的是五种常用的C/C++编译器对64位整型的支持,这五种编译器分别是gcc(m…
前言: 在16位环境下,int/unsigned int 占16位,long/unsigned long占32位 在32位环境下,int占32位,unsigned int占16位,long/unsigned long占32位 何时需要使用: long 和 int 范围是[-2^31,2^31),即-2147483648~2147483647,而unsigned范围是[0,2^32),即0~4294967295,所以常规的32位整数只能够处理40亿左右,当遇到比40亿大的多的数就要用到64位. 6…
C++的64位整数[原]by 赤兔 http://baike.baidu.com/view/1235293.htm 在做ACM题时,经常都会遇到一些比较大的整数.而常用的内置整数类型常常显得太小了:其中long 和 int 范围是[-2^31,2^31),即-2147483648~2147483647.而unsigned范围是[0,2^32),即0~4294967295.也就是说,常规的32位整数只能够处理40亿以下的数. 那遇到比40亿要大的数怎么办呢?这时就要用到C++的64位扩展了.不同的…
#include "iostream";//包含C++的头文件using namespace std;//使用命名空间std标准的命名空间(在这个命名空间中定义了很多标准定义)void main01(){ //printf("hello...\n"); //cout标准输出,黑屏幕 // <<左移操作符 在C++里面,功能的改造(增强)==>C++语言操作符重载 //endl \n //打印到屏幕 并且换行 cout << "…
C++读写二进制文件 最近在给android层提供支持,因此代码都是用标准库库函数写出来的,好多windows和第三方的库不能或者很难使用,下面有我在读写二进制文件时候的一些心得,也算是一种总结吧 1.读二进制信息 bool bRet = true; std::ofstream fout(szDestFile, std::ios::binary | std::ios::app); std::ifstream fin(szOrigFile, std::ios::binary); if (fin.b…
基础知识 1.const const 修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的. ; 或 ; //在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再改变它了 const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是像#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干份拷贝. #define PI 3.14159 //常量宏 const double Pi=3.14…