C++基础:控制台输⼊输出
输出流
C++的类ostream提供了格式化输出和⽆格式输出的功能
输出功能包括
⽤流插⼊运算符输出标准类型的数据;
⽤成员函数put输出字符;
成员函数write的⽆格式化输出;
输出特定形式数值
1.标准类型的数据⽤流插⼊运算符<<;输出
格式:
cout << 数据项 ;
C++能⾃动判别数据类型,并根据数据类型解释内存单元的信息,把它转换成字符显⽰在显⽰器上。
注意:
1.c++中地址⽤⼗六进制输出。
2.如果输出的指针变量是⼀个指向字符的指针时,C++并不输出该指针中保存的地址,⽽是输出该指针指向的字符串。如果确实想输出这个指向字符的指针变量中保存的地址值,可以⽤强制类型转换,将它转换成void*类型。
#include <iostream>
using namespace std;
int main()
{    char *ptr = "abcdef";
cout << "ptr指向的内容为: " << ptr << endl;//会输出字符串
cout << "ptr中保存的地址为:" << (void*)ptr  //是⼀个通配的指针类型,可以输出字符串地址
<< endl;
return 0;
}
2.⽤成员函数put输出字符
cout.put(‘A’); // 将⼀个字符A显⽰在屏幕上,并返回当前对象。
⽤成员函连续调⽤put函数: cout.put(‘A’).put(‘\n’);//  该语句在输出字符A后输出⼀个换⾏符。圆点运算符(.)从左向右结合。cout.put(65); //⽤ASCII码值表达式调⽤put函数,语句也输出字符A。
3.write的⽆格式输出
basic_ostream<charT,traits>& write(const char_type* s,streamsize n);//模板原型
调⽤成员函数write可实现⽆格式输出。不管数据类型,传给它的是字节流,看成字符数组,把每个字节解释成字符。它有两个参数。第⼀个参数提供了要显⽰的字符串的地址,第⼆个参数指出要显⽰多少个字节,是⼀个整型值。这个函数把⼀定量的字节从字符数组中输出。这些字节都是未经任何格式化的,仅仅是以原始数据形式输出。
char buffer[]  =“HAPPY BIRTHDAY”;
cout.write(buffer, 10  );// 输出buffer的10个字节
cout.write(“ABCDEFGHIJKLMNOPQRSTUVWXYZ”, 10);// 显⽰了字母表中的前10个字母。
输⼊流
1.流读取运算符 >>
输⼊流最常⽤的操作是流读取运算符。
流读取运算符通常会跳过输⼊流中的空格、tab键、换⾏符等空⽩字符
当遇到输⼊流中的⽂件结束符时,流读取运算符返回0(false);否则,流读取运算符返回对调⽤该运算符的对象的引⽤
流读取运算符在读⼊EOF时返回0的特性使得它经常被⽤作为循环的判别条件,以避免选择特定的表⽰输⼊结束的值
EOF在各个系统中有不同的表⽰。在windows中是Ctrl+z
2.成员函数read()
read函数和ostream中的write函数相对应,write可以实现⽆格式输出,这⾥read函数可以实现⽆格式输⼊,把输⼊看出是字符的形式不管你输⼊流的每个字符是什么含义包括空格字符,都统统将每个输⼊看出是⼀个字符,如输⼊“0 1 2”是输⼊了三个字符,放在⼀个字符数组⾥边。
read函数它有两个参数。第⼀个参数是⼀个指向字符的指针,第⼆个参数是⼀个整型值。这个函数把⼀定量的字节从输⼊缓冲区读⼊字符数组,不管这些字节包含的是什么内容
char buffer[80] ;
注:如果还没有读到指定的字符数,遇到了EOF,则读操作结束。此时可以⽤成员函数gcount统计输⼊的字符个数。
例⼦:
#include <iostream>
using namespace std;
int main()
{char buffer[ 80 ];
cout << "Enter a sentence:\n";
cout << "\nThe sentence entered was:\n";
cout.write( buffer, unt() );//gcount()函数可以统计输⼊了多少个有效字符
cout << endl;
cout << "⼀共输⼊了" << unt() << "个字符\n";
return 0;
}
//输出结果
输出结果:Enter a sentence:
Using the read, write, and gcount member functions
The sentence entered was:
Using the read,write
⼀共输⼊了 20个字符
<函数和getline函数
使⽤>>没办法读⼊空⽩字符、换⾏等特殊字符,⽽get函数和getline函数能够读取任意的字符
get函数⽤于读⼊字符或字符串、getline函数⽤于读取字符串
3.1get函数
有三种格式:不带参数、带⼀个参数、带三个参数
不带参数的get函数
不带参数的get函数从当前输⼊对象流中读⼊⼀个字符,包括空⽩字符以及表⽰⽂件结束的EOF字符,并将读⼊值作为函数的返回值返回。
while((())!=EOF)
cout<<ch;      //将输⼊的字符回显在显⽰器上,直到输⼊EOF
带⼀个参数的get函数
带⼀个字符类型的引⽤参数,它将输⼊流中的下⼀字符(包括空⽩字符)存储在参数中,它的返回值是当前对象的引⽤。
带三个参数的get成员函数
参数分别是接收字符的字符数组、字符数组的⼤⼩和分隔符(默认值为‘\n’)。函数结束:(1)在读取⽐指定的最⼤字符数少⼀个字符后结束,(2)在遇到分隔符时结束。
为使字符数组(被程序⽤作缓冲区)中的输⼊字符串能够结束,空字符会被插⼊到字符数组中。函数不把分隔符放到字符数组中,但是分隔符仍然会保留在输⼊流中。
//1.要输⼊⼀⾏字符,可⽤下列语句:
<(ch, 80, ’\n’);
//或
<(ch, 80);
//2.要输⼊⼀个以句号结尾的句⼦,可⽤下⾯的语句:
<(ch, 80, ’.’);
当遇到输⼊结束符时,程序插⼊⼀个’\0’作为输⼊字符串的结束标记,输⼊结束符没有放在字符数组中,⽽是保留在输⼊流中,下⼀个和输⼊相关的语句会读⼊这个输⼊结束符。如下⾯句⼦:
<(ch, 80, ’.’);
// ⽤户输⼊
abcdef.↙
则ch中保存的是字符串“abcdef”,⽽“.”仍保留在输⼊缓冲区中。如果继续调⽤(ch1);  或  cin >> ch1 ;则字符变量ch1中保存的是“.”
3.2getline函数
与带三个参数的get函数类似,它读取⼀⾏信息到字符数组中,然后插⼊⼀个空字符。所不同的是,getline要去除输⼊流中的分隔符(即读取字符并删除它),但是不把它存放在字符数组中。
设置整型数的基数
输⼊输出流中的整型数默认为⼗进制表⽰。为了使流中的整型数不局限于⼗进制,可以插⼊hex操纵符将基数设为⼗六进制,插⼊oct操纵符将基数设为⼋进制,也可以插⼊dec操纵符将基数重新设为⼗进制
也可以通过流操纵符setbase来改变流的基数。该操纵符有⼀个整型参数,它的值可以是16,10或8,表⽰将整型数的基数设为⼗六进制,⼗进制或⼋进制
使⽤任何带参数的流操纵符,都必须包含头⽂件iomanip。
流的基数值只有被显式更改时才会变化,否则⼀直沿⽤原有的基数。
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{    int n;
cout << "Enter a octal number: ";
cin >> oct >> n;
cout << "octal " << oct << n
<< " in hexdecimal is:" << hex << n << '\n' ;
cout << "hexdecimal " << n
<< " in decimal is:" << dec << n << '\n' ;
cout << setbase(8) << "octal " << n
<<" in octal is:" << n << endl;
return 0;
}
//输出为
Enter a octal number: 30
Octal 30 in hexdecimal is: 18
Hexdecimal 18 in decimal is: 24
Octal 30 in octal is: 30
设置浮点数精度
设置浮点数的精度(即,实型数的有效位数)可以⽤(1)流操纵符setprecision、(2)基类ios的成员函数precision来实现。⼀旦调⽤了这两者之中的某⼀个,将影响所有输出的浮点数的精度,直到下⼀个设置精度的操作为⽌。这个操纵符和成员函数都有⼀个参数,表⽰有效位数的长度。
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{    double x = 123.456789, y = 9876.54321;
for (int i = 9; i > 0; --i)
{    cout.precision(i); //设置输出精度
cout << x << '\t' << y << endl;  }
// 或  for (int i = 9; i > 0; --i)
// cout << setprecision(i) << x << '\t' << y << endl;
return 0;
}
/
/输出结果
执⾏结果:
123.456789  9876.54321
123.45679    9876.5432
123.4568    9876.543
123.457      9876.54
false是什么函数123.46      9876.5
123.5        9877
123        9.88e+003
1.2e+002    9.9e+003
1e+002      1e+004

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。