
C++ 输入输出流是什么意思
可以把流看作是一种数据的载体,通过它可以实现数据交换和传输。
就像水流是一串水组成的 计算机中的数据流就是由一串数据组成的东西。
C++的输入输出流及文件操作1. C++保留C的输入输出单个字符的函数 (1) putchar(c) —— 字符输出 例程:#includeusing namespace std;int main(){ char a,b,c; a='B'; b='O';c='Y'; putchar(a); putchar(b); putchar(c);putchar('\\\/n'); putchar(66);putchar(79);putchar(89);putchar(10); \\\/\\\/10是换行的ASCII码 return 0;} (2) getchar() ——字符输入函数 例程: #include using namespace std;int main(){ char c; c=getchar(); putchar(c+32); \\\/\\\/转化为小写字母,大小写之间包括[ \\\/ ] ^ - 、6个字符,因此不加26加32。
'A'=65 putchar('\\\/n'); return 0;} 也可用cout来输出: cout<<(c=getchar()+32);2. scanf()、printf()函数的输入和输出 scanf(格式控制,输出表列); printf(格式控制,输出表列); 例程: #include using namespace std;int main(){ int a; float b; char c; scanf(%d % c % f, &a,&c,&b); printf(a=%d, b=%f, c=%c \\\/n,a,b,c); return 0;}3. 标准输入输出流cin、cout 包括头文件#include 输入输出流的控制符要加入头文件 #include cout< ; …………………… outfile.close(); \\\/\\\/关闭 5. 文件写入#include #include#include \\\/\\\/一定不能少了,否则报错 error C2679 using namespace std;int main(){ string str; ofstream out(d.txt,ios::out); \\\/\\\/等价于ofstream out(d.txt) if(!out) \\\/\\\/若打开失败,out返回0值 { cerr<<打开失败 < exit(0); } str=床前明月光\\\/n疑是地上霜\\\/n举头望明月\\\/n低头思故乡\\\/n; out< return 0; }6. 读文件到控制台#include #include #include using namespace std; int main(){ ifstream infile(d:\\\/\\\/new\\\/\\\/d.txt,ios::in); \\\/\\\/定义输入文件的流对象,以输入方式打开磁盘文件d.txt,第二个参数可去 if(!infile) { cerr<<打开失败 < exit(1); } for(string str;getline(infile,str);) \\\/\\\/逐行打开并逐行显示,因此在循环中实现 cout< infile.close(); return 0; } 或把 for(string str;getline(in,str);) cout<两句改为 string str; while(getline(in,str)) cout<7. 文件复制#include #include #include using namespace std; int main() { ifstream in(d.txt); if(!in) { cerr<<打开源文件失败!< exit(1); } ofstream out(b.txt); if(!out) { cerr<<打开目的文件失败!< exit(1); } for(string str;getline(in,str);) out< cout<<文件复制成功!< in.close(); out.close(); return 0; }8. 自定义一个文件读入的函数 void display( char *filename)#include #include #include using namespace std; void display(char *filename) { ifstream infile(filename,ios::in); if(!infile) { cerr<<打开失败 < exit(1); } char ch; while(infile.get(ch)) cout.put(ch); cout< infile.close(); }int main() { display(d.txt); return 0; }9.关于文件读写的综合应用#include #include using namespace std;\\\/\\\/从键盘读入字母并存入文件“d.txt”中 void save_to_file() { ofstream ofile(d.txt); if(!ofile) { cerr<<打开失败d.txt < exit(1); } char c[80]; cin.getline(c,80); \\\/\\\/从键盘逐个读入一行字符 for(int i=0;c[i]!=0;i++) \\\/\\\/对字符逐个处理,知道遇到'\\\/n'结束 if(c[i]>=65 && c[i]<=90||c[i]>=97 && c[i]<=122) { ofile.put(c[i]); \\\/\\\/将字母存入磁盘文件d.txt cout< } cout< ofile.close(); }\\\/\\\/将d.txt中的字母转化为大写字母并存入out.txt中 void get_from_file() { char ch; ifstream infile(d.txt); if(!infile) { cerr<<打开失败d.txt < exit(1); } ofstream outfile(out.txt); if(!infile) { cerr<<打开失败out.txt < exit(1); } while(infile.get(ch)) \\\/\\\/逐个读入字符成功后执行下面的语句 { if(ch>=97 &&ch<=122) ch=ch-32; outfile.put(ch); cout< } cout< infile.close(); outfile.close(); }int main() { save_to_file(); get_from_file(); return 0; }=========================== C\\\/C++的字符或字符数组的读入函数总结=====================1、cin 1、cin.get() 2、cin.getline() 3、getline() 4、gets() 5、getchar()1、cin>> 用法1:最基本,也是最常用的用法,输入一个数字:#include using namespace std; main () { int a,b; cin>>a>>b; cout<}输入:2[回车]3[回车] 输出:5用法2:接受一个字符串,遇“空格”、“TAB”、“回车”都结束#include using namespace std; main () { char a[20]; cin>>a; cout<}输入:jkljkljkl 输出:jkljkljkl输入:jkljkl jkljkl \\\/\\\/遇空格结束 输出:jkljkl2、cin.get()用法1: cin.get(字符变量名)可以用来接收字符#include using namespace std; main () { char ch; ch=cin.get(); \\\/\\\/或者cin.get(ch); cout<}输入:jljkljkl 输出:j用法2:cin.get(字符数组名,接收字符数目)用来接收一行字符串,可以接收空格#include using namespace std; main () { char a[20]; cin.get(a,20); cout<}输入:jkl jkl jkl 输出:jkl jkl jkl输入:abcdeabcdeabcdeabcdeabcde (输入25个字符) 输出:abcdeabcdeabcdeabcd (接收19个字符+1个'\\\/0')3、cin.getline() \\\/\\\/ 接受一个字符串,可以接收空格并输出getline 会将换行符替换为空字符#include using namespace std; main () { char m[20]; cin.getline(m,5); cout<}输入:jkljkljkl 输出:jklj接受5个字符到m中,其中最后一个为'\\\/0',所以只看到4个字符输出;如果把5改成20: 输入:jkljkljkl 输出:jkljkljkl输入:jklf fjlsjf fjsdklf 输出:jklf fjlsjf fjsdklf\\\/\\\/延伸: \\\/\\\/cin.getline()实际上有三个参数,cin.getline(接受字符串的看哦那间m,接受个数5,结束字符) \\\/\\\/当第三个参数省略时,系统默认为'\\\/0' \\\/\\\/如果将例子中cin.getline()改为cin.getline(m,5,'a');当输入jlkjkljkl时输出jklj,输入jkaljkljkl时,输出jk当用在多维数组中的时候,也可以用cin.getline(m[i],20)之类的用法:#include #include using namespace std;main () { char m[3][20]; for(int i=0;i<3;i++) { cout<<\\\/n请输入第 而cin.getline()和gets()因为可以接收空格,所以不会产生这个错误;6、getchar() \\\/\\\/接受一个字符,需包含“#include”#include #include using namespace std; main () { char ch; ch=getchar(); \\\/\\\/不能写成getchar(ch); cout<}输入:jkljkljkl 输出:j\\\/\\\/getchar()是C语言的函数,C++也可以兼容,但是尽量不用或少用;总结:1.读入一行gets(char a[]); \\\/\\\/接受一行,遇回车结束 gets(m[i]) \\\/\\\/可用于多维数组中cin.get(char a[],int 5,'\\\/n') \\\/\\\/将字符数组a的前5个字符读入,遇到换行符结束;比如:a bc12ds,将会读入4个字符 a bc,外加一个'\\\/0'; \\\/\\\/ 一般第三个参数不写,默认为'\\\/0' eg:#include #include using namespace std; main () { string str; getline(cin,str); cout<}2.读入一个字符getchar() \\\/\\\/接受一个字符,需包含“#include” char ch =getchar();cin.get(char c) 或者 cin.get() char ch=cin.get(); 或者cin.get(ch) getline()和cin.getline()类似,但是cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数cin.getline(char a[],int 5,'\\\/n') \\\/\\\/将字符数组a的前5个字符读入,遇换行符结束;如:a bc12ds,将会读入4个字符 a bc,外加一个'\\\/0'; \\\/\\\/ 一般第三个参数不写,默认为'\\\/0' cin.getline(m[i],20) \\\/\\\/可用于多维数组中getline() \\\/\\\/ 接受一个字符串,可以接收空格并输出,需包含“#include 面向对象技术是软件技术的一次革命,在软件开发史上具有里程碑的意义。 随着OOP(面向对象编程)向OOD(面向对象设计)和OOA(面向对象分析)的发展,最终形成面向对象的软件开发方法 OMT(LbjectModellingTechnique)。 这是一种自底向上和自顶向下相结合的方法,而且它以对象建模为基础,从而不仅考虑了输入、 输出数据结构,实际上也包含了所有对象的数据结构。 所以OMT彻底实现了PAM没有完全实现的目标。 不仅如此,OO技术在需求分析、可维护性和可靠性这三 个软件开发的关键环节和质量 指标上有了实质性的突破,彻底地解决了在这些方面存在的严重问题,从而宣告了软件危机末日的来临。 自底向上的归纳 OMT的第一步是从问题的陈述入手,构造系统模型。 从真实系统导出类的体系,即对象模型包括类的属性,与子类、父类的继承关系,以及类之间的关 联。 类是具有相似属性和行为的一组具体实例(客观对象)的抽象,父类是若干子类的归纳。 因此这是一种自底向上的归纳过程。 在自底向上的归纳过程中,为使子 类能更合理地继承父类的属性和行为,可能需要自顶向下的修改,从而使整个类体系更加合理。 由于这种类体系的构造是从具体到抽象,再从抽象到具体,符合人类 的思维规律,因此能更快、更方便地完成任务。 这与自顶向下的Yourdon方法构成鲜明的对照。 在Yourdon方法中构造系统模型是最困难的一步,因为 自顶向下的“顶”是一个空中楼阁,缺乏坚实的基础,而且功能分解有相当大的任意性,因此需要开发人员有丰富的软件开发经验。 而在OMT中这一工作可由一般 开发人员较快地完成。 在对象模型建立后,很容易在这一基础上再导出动态模型和功能模型。 这三个模型一起构成要求解的系统模型。 自顶向下的分解 系统模型建立后的工作就是分解。 与Yourdon方法按功能分解不同,在OMT中通常按服务(Service)来分解。 服务是具有共同目标的相关 功能的集合,如I/O处理、图形处理等。 这一步的分解通常很明确,而这些子系统的进一步分解因有较具体的系统模型为依据,也相对容易。 所以OMT也具有自 顶向下方法的优点,即能有效地控制模块的复杂性,同时避免了Yourdon方法中功能分解的困难和不确定性。 OMT的基础是对象模型 每个对象类由数据结构(属性)和操作(行为)组成,有关的所有数据结构(包括输入、输出数据结构)都成了软件开发的依据。 因此Jackson方法 和PAM中输入、输出数据结构与整个系统之间的鸿沟在OMT中不再存在。 OMT不仅具有Jackson方法和PAM的优点,而且可以应用于大型系统。 更重 要的是,在Jackson方法和PAM方法中,当它们的出发点——输入、输出数据结构(即系统的边界)发生变化时,整个软件必须推倒重来。 但在OMT中系 统边界的改变只是增加或减少一些对象而已,整个系统改动极小。 需求分析彻底 需求分析不彻底是软件失败的主要原因之一。 即使在目前,这一危险依然存在。 传统的软件开发方法不允许在开发过程中用户的需求发生变化,从而导致种种问题。 正是由于这一原 因,人们提出了原型化方法,推出探索原型、实验原型和进化原型,积极鼓励用户改进需求。 在每次改进需求后又形成新的进化原型供用户试用,直到用户基本满意,大大提高了软件的 成功率。 但是它要求软件开发人员能迅速生成这些原型,这就要求有自动生成代码的工具的支持。 OMT彻底解决了这一问题。 因为需求分析过程已与系统模型的形成过程一致,开发人员与用户的讨论是从用户熟悉的具体实例(实体)开始的。 开发人员必须搞清现实系统才能导出系统模型,这就使用户与开发人员之间有了共同的语言,避免了传统需求分析中可能产生的种种问题。 可维护性大大改善 在OMT之前的软件开发方法都是基于功能分解的。 尽管软件工程学在可维护方面作出了极大的努力,使软件的可维护性有较大的改进。 但从本质上讲,基于功能分解的软件是不易 维护的。 因为功能一旦有变化都会使开发的软件系统产生较大的变化,甚至推倒重来。 更严重的是,在这种软件系统中,修改是困难的。 由于种种原因,即使是微小的修改也可能引入 新的错误。 所以传统开发方法很可能会引起软件成本增长失控、软件质量得不到保证等一系列严重问题。 正是OMT才使软件的可维护性有了质的改善。 OMT的基础是目标系统的对象模型,而不是功能的分解。 功能是对象的使用,它依赖于应用的细节,并在开发过程中不断变化。 由于对象是客观存在的,因此当需求变化时对象的性质要比对象的使用更为稳定,从而使建立在对象结构上的软件系统也更为稳定。 更重要的是OMT彻底解决了软件的可维护性。 在OO语言中,子类不仅可以继承父类的属性和行为,而且也可以重载父类的某个行为(虚函数)。 利用这 一特点,我们可以方便地进行功能修改:引入某类的一个子类,对要修改的一些行为(即虚函数或虚方法)进行重载,也就是对它们重新定义。 由于不再在原来的程 序模块中引入修改,所以彻底解决了软件的可修改性,从而也彻底解决了软件的可维护性。 OO技术还提高了软件的可靠性和健壮性。 C-style I\\\/O is still supported in C++. However, the iostream objects offer 2 advantages over the printf() family: type safety and support for user-defined types. Consider the following example: C风格的I\\\/O在C++里是支持的,但是同时,iostream提供了更加优秀的I\\\/O对象来对printf家族进行完善iostream的优点有: 1. 类型安全 2. 并且支持用户自定义类型的流操作 3. iostream是根据操作对象自适应的,只需要使用>>或者<<就可以搞定一切 你来看下面这个例子: printf(Your answer is: %s\\\ , myStr); cout << Your answer is: << myStr << endl; 4. printf 隶属于cstdio,是函数; cout\\\/cin 隶属于iostream,是对象 5. 面试的时候,你如果应聘c++代码员,你写printf,我就会认为你还没有明白C++和C的区别,或者说你是个C程序员,看了C++基本语法,但是尚未转型成功录用的话,可能会在以后的设计上出现C\\\/C++粘合层的代码 6. 教你个窍门,记住printf的复杂的格式化符号#include 可以把流看作是一种数据的载体,通过它可以实现数据交换和传输。 就像水流是一串水组成的 计算机中的数据流就是由一串数据组成的东西。 C++的输入输出流及文件操作1. C++保留C的输入输出单个字符的函数(1) putchar(c) —— 字符输出例程:#includeusing namespace std;int main(){char a,b,c;a='B'; b='O';c='Y';putchar(a); putchar(b); putchar(c);putchar('\\\/n');putchar(66);putchar(79);putchar(89);putchar(10); \\\/\\\/10是换行的return 0;}(2) getchar() ——字符输入函数例程:#includeusing namespace std;int main(){char c;c=getchar();putchar(c+32); \\\/\\\/转化为,大小写之间包括[ \\\/ ] ^ - 、6个字符,因此不加26加32。 'A'=65putchar('\\\/n');return 0;}也可用cout来输出: cout<<(c=getchar()+32);2. scanf()、printf()函数的输入和输出scanf(格式控制,输出表列);printf(格式控制,输出表列);例程:#includeusing namespace std;int main(){int a;float b;char c;scanf(%d % c % f, &a,&c,&b);printf(a=%d, b=%f, c=%c \\\/n,a,b,c);return 0;}3. 标准输入输出流cin、cout包括头文件#include输入输出流的控制符要加入头文件 #includecout< ;……………………outfile.close(); \\\/\\\/关闭 5. 文件写入#include #include#include \\\/\\\/一定不能少了,否则报错 error C2679 using namespace std;int main(){ string str; ofstream out(d.txt,ios::out); \\\/\\\/等价于ofstream out(d.txt) if(!out) \\\/\\\/若打开失败,out返回0值{cerr<<打开失败 < exit(1); } for(string str;getline(infile,str);) \\\/\\\/逐行打开并逐行显示,因此在循环中实现 cout< infile.close(); return 0; }或把 for(string str;getline(in,str);) cout<两句改为 string str; while(getline(in,str)) cout<7. 文件复制#include #include #include using namespace std; int main() { ifstream in(d.txt); if(!in) { cerr<<打开源文件失败!< exit(1); } ofstream out(b.txt); if(!out) { cerr<<打开目的文件失败!< exit(1); } for(string str;getline(in,str);) out< cout<<文件复制成功! < exit(1); } char ch; while(infile.get(ch)) cout.put(ch); cout< infile.close(); }int main() { display(d.txt); return 0; }9.关于文件读写的综合应用#include #include using namespace std;\\\/\\\/从键盘读入字母并存入文件“d.txt”中 void save_to_file() { ofstream ofile(d.txt); if(!ofile) { cerr<<打开失败d.txt < exit(1); } char c[80]; cin.getline(c,80); \\\/\\\/从键盘逐个读入一行字符 for(int i=0;c[i]!=0;i++) \\\/\\\/对字符逐个处理,知道遇到'\\\/n'结束 if(c[i]>=65 && c[i]<=90||c[i]>=97 && c[i]<=122) { ofile.put(c[i]); \\\/\\\/将字母存入磁盘文件d.txt cout< } cout< ofile.close(); }\\\/\\\/将d.txt中的字母转化为大写字母并存入out.txt中 void get_from_file() { char ch; ifstream infile(d.txt); if(!infile) { cerr<<打开失败d.txt < exit(1); } ofstream outfile(out.txt); if(!infile) { cerr<<打开失败out.txt < exit(1); }while(infile.get(ch)) \\\/\\\/逐个读入字符成功后执行下面的语句 { if(ch>=97 &&ch<=122) ch=ch-32; outfile.put(ch); cout< } cout< infile.close(); outfile.close(); }int main() { save_to_file(); get_from_file(); return 0; }=========================== 的字符或字符数组的读入函数总结=====================1、cin 1、cin.get() 2、cin.getline() 3、getline() 4、gets() 5、getchar()1、cin>> 用法1:最基本,也是最常用的用法,输入一个数字:#include using namespace std; main () { int a,b; cin>>a>>b; cout<}输入:2[回车]3[回车] 输出:5用法2:接受一个字符串,遇“空格”、“TAB”、“回车”都结束#include using namespace std; main () { char a[20]; cin>>a; cout<}输入:jkljkljkl 输出:jkljkljkl输入:jkljkl jkljkl \\\/\\\/遇空格结束 输出:jkljkl2、cin.get()用法1: cin.get(字符变量名)可以用来接收字符#include using namespace std; main () { char ch; ch=cin.get(); \\\/\\\/或者cin.get(ch); cout<}输入:jljkljkl 输出:j用法2:cin.get(字符数组名,接收字符数目)用来接收一行字符串,可以接收空格#include using namespace std; main () { char a[20]; cin.get(a,20); cout<}输入:jkl jkl jkl 输出:jkl jkl jkl输入:abcdeabcdeabcdeabcdeabcde (输入25个字符) 输出:abcdeabcdeabcdeabcd (接收19个字符+1个'\\\/0')3、cin.getline() \\\/\\\/ 接受一个字符串,可以接收空格并输出getline 会将替换为空字符#include using namespace std; main () { char m[20]; cin.getline(m,5); cout<}输入:jkljkljkl 输出:jklj接受5个字符到m中,其中最后一个为'\\\/0',所以只看到4个字符输出;如果把5改成20: 输入:jkljkljkl 输出:jkljkljkl输入:jklf fjlsjf fjsdklf 输出:jklf fjlsjf fjsdklf\\\/\\\/延伸: \\\/\\\/cin.getline()实际上有三个参数,cin.getline(接受字符串的看哦那间m,接受个数5,结束字符) \\\/\\\/当第三个参数省略时,系统默认为'\\\/0' \\\/\\\/如果将例子中cin.getline()改为cin.getline(m,5,'a');当输入jlkjkljkl时输出jklj,输入jkaljkljkl时,输出jk当用在多维数组中的时候,也可以用cin.getline(m[i],20)之类的用法:#include #include using namespace std;main () { char m[3][20]; for(int i=0;i<3;i++) { cout<<\\\/n请输入第 而cin.getline()和gets()因为可以接收空格,所以不会产生这个错误;6、getchar() \\\/\\\/接受一个字符,需包含“#include”#include #include using namespace std; main () { char ch; ch=getchar(); \\\/\\\/不能写成getchar(ch); cout<}输入:jkljkljkl 输出:j\\\/\\\/getchar()是C语言的函数,C++也可以兼容,但是尽量不用或少用;总结:1.读入一行gets(char a[]); \\\/\\\/接受一行,遇回车结束gets(m[i]) \\\/\\\/可用于多维数组中cin.get(char a[],int 5,'\\\/n') \\\/\\\/将字符数组a的前5个字符读入,遇到结束;比如:a bc12ds,将会读入4个字符 a bc,外加一个'\\\/0';\\\/\\\/ 一般第三个参数不写,默认为'\\\/0'eg:#include #include using namespace std; main () { string str; getline(cin,str); cout<}2.读入一个字符getchar() \\\/\\\/接受一个字符,需包含“#include”char ch =getchar();cin.get(char c) 或者 cin.get()char ch=cin.get(); 或者cin.get(ch)getline()和cin.getline()类似,但是cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数cin.getline(char a[],int 5,'\\\/n') \\\/\\\/将字符数组a的前5个字符读入,遇换行符结束;如:a bc12ds,将会读入4个字符 a bc,外加一个'\\\/0';\\\/\\\/ 一般第三个参数不写,默认为'\\\/0'cin.getline(m[i],20) \\\/\\\/可用于多维数组中getline() \\\/\\\/ 接受一个字符串,可以接收空格并输出,需包含“#include 源型和漏型的区别源型是电流流出,漏型是电流流入。 因各品牌厂家PLC设计使用的不同,对于源型和漏型的定义也相对不同(例如三菱的定义和西门子的定义正好相反),三菱的源型输入与漏型输入,都是相对于PLC公共端(COM端或M端)而言,电流流出则为源型,电流流入则为漏型。 西门子的源型输入与漏型输入,都是相对于PLC输入端子而言,电流流出则为源型,电流流入则为漏型。 PNP与NPN传感器:NPN集电极开路输出电路的输出OUT端通过开关管和0V连接,当传感器动作时,开关管饱和导通,OUT端和0V相通,输出0V低电平信号;PNP集电极开路输出电路的输出OUT端通过开关管和+V连接,当传感器动作时,开关管饱和导通,OUT端和+V相通,输出+V高电平信号。 NPN和PNP输出电路和PLC输入模块的连接NPN集电极开路和三菱plc的连接PNP集电极开路和三菱plc的连接NPN集电极开路输出为0V,当输出OUT端和PLC输入相连时,电流从PLC的输入端流出,从PLC的公共端流入。 PNP集电极开路输出为+V高电平,当输出OUT端和PLC输入相连时,电流从PLC的输入端流入,从PLC的公共端流出。 总结:源型:三菱:公共端接电源负,输入端接电源正,支持PNP传感器;西门子:公共端接正,输入端接负,支持NPN传感器;漏型:三菱:公共端接正,输入端接负,支持NPN传感器;(常用)西门子:公共端接负,输入端接正,支持PNP传感器。 (常用)洛克自动化 C语言中的输入输出函数总结C语言中数据输入输出的概念及在C语言中的实现 (1)所谓输入输出是以计算机为主体而言的。 (2)本章介绍的是向标准输出设备显示器输出数据的语句。 (3)在C语言中,所有的数据输入/输出都是由库函数完成的。 因此都是函数语句。 (4)在使用C语言库函数时,要用预编译命令#include将有关“头文件”包括到源文件中。 使用标准输入输出库函数时要用到 “stdio.h”文件,因此源文件开头应有以下预编译命令:#include< stdio.h >或#include ”stdio.h”,stdio是standard input &outupt的意思。 (5)考虑到printf和scanf函数使用频繁,系统允许在使用这两个函数时可不加#include< stdio.h >或#include ”stdio.h”一、字符数据的输入输出( 1 ) putchar 函数(字符输出函数)putchar 函数是字符输出函数, 其功能是在显示器上输出单个字符。 其一般形式为:putchar(字符变量).对控制字符则执行控制功能,不在屏幕上显示。 使用本函数前必须要用文件包含命令:#include 其一般形式为:getchar();通常把输入的字符赋予一个字符变量,构成赋值语句,如:char c; c=getchar();使用getchar函数还应注意几个问题:1)getchar函数只能接受单个字符,输入数字也按字符处理。 输入多于一个字符时,只接收第一个字符。 2)使用本函数前必须包含文件“stdio.h”。 3)在TC屏幕下运行含本函数程序时,将退出TC 屏幕进入用户屏幕等待用户输入。 输入完毕再返回TC屏幕。 二、格式输入与输出(1)printf函数(格式输出函数)printf函数称为格式输出函数,其关键字最末一个字母f即为“格式”(format)之意。 其功能是按用户指定的格式,把指定的数据显示到显示器屏幕上。 在前面的例题中我们已多次使用过这个函数。 (1)printf函数调用的一般形式printf函数是一个标准库函数,它的函数原型在头文件“stdio.h”中。 但作为一个特例,不要求在使用 printf 函数之前必须包含stdio.h文件。 printf函数调用的一般形式为:printf(“格式控制字符串”,输出表列),其中格式控制字符串用于指定输出格式。 格式控制串可由格式字符串和非格式字符串两种组成。 格式字符串是以%开头的字符串,在%后面跟有各种格式字符,以说明输出数据的类型、形式、长度、小数位数等。 如:“%d”表示按十进制整型输出;“%ld”表示按十进制长整型输出;“%c”表示按字符型输出等。 非格式字符串在输出时原样照印,在显示中起提示作用。 输出表列中给出了各个输出项,要求格式字符串和各输出项在数量和类型上应该一一对应。 ***格式字符串格式: [标志][输出最小宽度][.精度][长度]类型1)类型:类型字符用以表示输出数据的类型,其格式符和意义如下表所示:d,以十进制形式输出带符号整数(正数不输出符号)o,以八进制形式输出无符号整数(不输出前缀0)x或X ,以十六进制形式输出无符号整数(不输出前缀Ox)u,以十进制形式输出无符号整数f,以小数形式输出单、双精度实数e或E,以指数形式输出单、双精度实数g或G,以%f或%e中较短的输出宽度输出单、双精度实数c,输出单个字符s,输出字符串2)标志:标志字符为-、+、#、空格四种,其意义下表所示:-,结果左对齐,右边填空格+,输出符号(正号或负号)空格,输出值为正时冠以空格,为负时冠以负号#,对c,s,d,u类无影响;对o类,在输出时加前缀o;对x类,在输出时加前缀0x;对e,g,f 类当结果有小数时才给出小数点3)输出最小宽度:用十进制整数来表示输出的最少位数。 若实际位数多于定义的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或0。 4)精度:精度格式符以“.”开头,后跟十进制整数。 本项的意义是:如果输出数字,则表示小数的位数;如果输出的是字符,则表示输出字符的个数;若实际位数大于所定义的精度数,则截去超过的部分。 5.长度:长度格式符为h,l两种,h表示按短整型量输出,l表示按长整型量输出。 (2)scanf函数(格式输入函数)scanf函数称为格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。 (1) scanf函数的一般形式scanf函数是一个标准库函数,它的函数原型在头文件“stdio.h”中,与printf函数相同,C语言也允许在使用scanf函数之前不必包含stdio.h文件。 scanf函数的一般形式为:scanf(“格式控制字符串”,地址表列);其中,格式控制字符串的作用与printf函数相同,但不能显示非格式字符串,也就是不能显示提示字符串。 地址表列中给出各变量的地址。 地址是由地址运算符“&”后跟变量名组成的。 这个地址就是编译系统在内存中给a,b变量分配的地址。 在C语言中,使用了地址这个概念,这是与其它语言不同的。 应该把变量的值和变量的地址这两个不同的概念区别开来。 变量的地址是C编译系统分配的,用户不必关心具体的地址是多少。 (2) 格式字符串格式字符串的一般形式为:%[*][输入数据宽度][长度]类型其中有方括号[]的项为任选项。 各项的意义如下:1) 类型:表示输入数据的类型,其格式符和意义如下表所示。 d,输入十进制整数o,输入八进制整数x,输入十六进制整数u,输入无符号十进制整数f或e,输入实型数(用小数形式或指数形式)c,输入单个字符s,输入字符串2) “*”符:用以表示该输入项,读入后不赋予相应的变量,即跳过该输入值。 如:scanf(%d %*d %d,&a,&b);当输入为:123时,把1赋予a,2被跳过,3赋予b。 3) 宽度:用十进制整数指定输入的宽度(即字符数)。 例如:scanf(%5d,&a);输入:12345678只把12345赋予变量a,其余部分被截去。 又如:scanf(%4d%4d,&a,&b);输入:12345678将把1234赋予a,而把5678赋予b。 4) 长度:长度格式符为l和h,l表示输入长整型数据(如%ld) 和双精度浮点数(如%lf)。 h表示输入短整型数据。 使用scanf函数还必须注意以下几点:1))scanf函数中没有精度控制,如:scanf(%5.2f,&a);是非法的。 不能企图用此语句输入小数为2位的实数。 2))scanf中要求给出变量地址,如给出变量名则会出错。 如 scanf(%d,a);是非法的,应改为scnaf(%d,&a);才是合法的。 3))在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔则可用空格,TAB或回车作间隔。 C编译在碰到空格,TAB,回车或非法数据(如对“%d”输入“12A”时,A即为非法数据)时即认为该数据结束。 4))在输入字符数据时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。 例如: scanf(%c%c%c,&a,&b,&c);输入为:def则把'd'赋予a, ' ' 赋予b,'e'赋予c。 只有当输入为:def时,才能把'd'赋于a,'e'赋予b,'f'赋予c。 如果在格式控制中加入空格作为间隔,如:scanf (%c %c %c,&a,&b,&c);则输入时各数据之间可加空格。 5) 如果格式控制串中有非格式字符则输入时也要输入该非格式字符。 例如:scanf(%d,%d,%d,&a,&b,&c);其中用非格式符“ , ”作间隔符,故输入时应为:5,6,7又如:scanf(a=%d,b=%d,c=%d,&a,&b,&c);则输入应为:a=5,b=6,c=76) 如输入的数据与输出的类型不一致时,虽然编译能够通过,但结果将不正确。 在“面向对象编程:Java collection更有效管理elements”一文中,我们讨论了Java 集合类架构中的类和功能并介绍了它的排序功能。 在本文中,我们将学习Java 平台提供的这些I\\\/O类,接口和操作。 让我们先从了解Java 数据流开始。 数据流 Java所有的I\\\/O机制都是基于数据流的,这些数据流表示了字符或者字节数据的流动序列。 Java的I\\\/O流提供了读写数据的标准方法。 任何Java中表示数据源的对象都会提供以数据流的方式读写它的数据的方法。 Java.io是大多数面向数据流的输入\\\/输出类的主要软件包。 这个软件包包含了两个抽象类,InputStream和OutputStream。 所有其它面象数据流的输入\\\/输出类都要扩展这两个基类。 java.io软件包提供了一些类和接口,它们在由InputStream和OuputStream类提供的读写操作的顶端定义了一些有用的抽象。 例如,ObjectInputStream类提供了让你把输入\\\/输出流中的数据当成对象来读取的方法,而ObjectOutputStream类提供了让你能够把Java对象写入数据流中的方法。 优化读写过程 JDK 1.1 增加了一套读写类,它们提供了比现有数据流类更有用的抽象和更好的输入\\\/输出性能。 例如,BufferedReader和BufferedWriter 类被用来从基于字符的输入和输出流中读取和写入文本。 BufferdReader 类缓存字符以更高效的读取字符串,数组和文本行。 BufferedWriter类缓存字符以更高效的写入字符串,数组和文本行。 BufferedReader和BufferedWriter 类可以按需求进行设置。 Java输入\\\/输出架构提供的读取器和写入器类包括 LineNumberReader 类,CharArrayReader类,FileReader类,FilterReader类,PushbackReader类,PipedReader类,StringReader类以及其它一些类。 这些类是在InputStream和OuputStream类顶部的包裹类因此提供了与InputStream和OuputStream类相似的方法。 但是,这些类为读写特定的对象,比方文件,字符数组和字符串等等提供了更高效而有用的抽象。 读取数据 当你从一个相应的数据源对象里提取输入流或者是创建一个读取器对象的时候就会自动打开一个输入流。 例如,要为一个文件打开输入流,我们只需要以下面的方式把文件名传递给Java.io.FileReader对象的构造函数: java.io.FileReader fileReader = new java.io.FileReader(\\\/home\\\/me\\\/myfile.txt.net\\\/forum\\\/images\\\/smiles\\\/icon_wink.gif border=0>; 要按顺序读取FileReader底层的输入流中的一个字节数据,只需要使用不带参数的read方法。 表A中的代码段从一个文件读取文本数据,一次一个字符,然后把它写入System.out里。 要从输入流读取指定数目的字节数据到char数组里,只需要使用带一个char[]参数的read方法。 数组的长度被用来确定应该读取的字符的个数。 表B演示了这个技术。 要关闭一个输入流以及这个流使用的所有系统资源,你只需要以下面的方式调用close方法: fileReader.close(); 写入数据 象一个输入流一样,输出流通常在你从相应的数据源提取它或者是在你创建一个写入对象的时候被自动的打开。 例如,要为一个文件打开输出流,我们把文件的名字传递给java.io.FileWriter对象的构造函数,如下所示: java.io.FileWriter fileWriter = new java.io.FileWriter(\\\/home\\\/me\\\/out.txt.net\\\/forum\\\/images\\\/smiles\\\/icon_wink.gif border=0>; 要将一个特定的字符写入到输出流中,可以使用带一个int参数的write方法,int参数代表要定入的字符。 int aChar = (int)'X'; fileWriter.write(aChar); 要在输出流给定的偏移地址写入一个char数组中特定数目的字符,你可以使用带一个char[]参数,一个int 偏移量参数和一个int长度参数的write方法,如下面的例子所示: fileWriter.write(buffer, 0, byteCount); 要关闭一个输出流并释放所有与之相关的系统资源,可以使用close方法,就象这样: fileWriter.close(); 要强迫写出一个输出流中的所有数据,可以使用下面的flush方法: fileWriter.flush(); 把它们全部综合起来 我们可以使用我们学习过的这些函数从一个文件中读取数据并同时写到另一个文件中去,如表C所示。 总结Java的输入\\\/输出机制为从不同的数据源读取和写入字符增加了一套简单而标准化的API。 你对一种数据源使用Java流的经验能够让你容易的使用其它由Java提供的数据源类型。 在我们下一篇文章中,我们将会开始学习Java平台的联网和远程通讯架构。 我们将会把我们对Java流的讨论扩展到这些环境并演示如何打开远程数据源,并象操作本地数据源,比方文件一样,写入数据和读取数据 输入是质量管理体程的开始,输质量管理体系过程的结一个过程的输入通其它过程的输出。 在质量管理体系模型中,输入为顾客及其他相关方的要求,输出为顾客对产品或服务的满意程度。 管理体系评审输入包括:顾客信息反馈、上次管理评审跟踪措施的实施情况和有效性、审核结果、过程业绩和产品的符合性、预防和纠正措施的状况、可能影响质量管理体系的内外部变化;输出为:质量管理体系及其过程的改进、与顾客要求有关的产品的改进及资源的需要等方面的改进意见和建议。 现在的烟感温感 分为智能编码 和非编码型, 智能编码的能向主机直接反馈 地址信号(主机需要知道哪里发生火情) ,非编码的不能直接反馈地址信号 通常做法是接输入模块 模块都是能够编码的 这样主机就能接受到地址信号。 例如现在的地下室的温感常用的是非编码的 只要把每个分区的温感接到一个输入模块上, 主机只要知道是哪个分区有火灾就行了。 不需要定位到点。 而地上的烟感用途不同 需要定点到具体位置。 这时非编码的需要很多模块 ,因此就需要直接反馈地址的编码型烟温感。 同样的现在也有编码手动报警按钮 编码消火栓启泵按钮 编码电话 有些设备无法直接输出输入信号 比如 压力开关 防火阀 信号阀等 这些只能有电流输出 没有编码信号。 这时需要用输入模块 ,设备输出电源到输入模块 模块输出信号到主机 。 输出模块 是主机需要联动设备时 主机只能直接控制输出编码模块,模块再输出电源带动需要联动的设备。就如何利用面向对象的软件开发方法来开发软件心得体会
C++引入了I\\\/O流实现输入输出,与 C语言相比,这种输入输出方法有哪些优点
c语言中的输入流是什么意思
漏型输入与源型输入区别
c语言中如何实现输入一个整数实现倒序输出
如何使用Java 输出\\\/输出流进行读写数据
质量管理体系中的输入输出怎么定义
消防中用的输入输出模块的作用是什么



