1. `printf()` 函数:用于输出信息到控制台或者文件,可以输出各种类型的数据,例如整数、浮点数、字符、字符串等。它的格式字符串可以通过占位符来指定输出数据的格式,类似于其他编程语言中的字符串格式化功能。
2. `scanf()` 函数:用于从控制台或者其他标准输入设备中读取输入数据,等待用户输入数据并读入数据。scanf() 函数的格式字符串中可以使用占位符来指定各种类型的输入数据,例如整数、浮点数、字符、串等。
3. `puts()` 函数:用于在控制台或者文件中输出一个字符串,并自动在字符串的末尾添加一个换行符。如果需要输出多行字符串,可以多次调用 puts() 函数来输出每行字符串。
4. `gets()` 函数:用于从标准输入设备中读取一个字符串。它可以读取包含空格和其他特殊字符的字符串,并将其保存到指定的字符数组中,直到读取到换行符为止。
这些输入输出函数是 C 语言中最常用的函数,可以方便地实现控制台的输入输出等功能。需要注意的是,这些函数都是标准库函数,如果要使用它们,需要在程序中包含相应的头文件,如 `<stdio.h>`。
C++标准输入输出流
在C++语言中,数据的输入和输出(简写为I/O)包括对标准输入设备键盘和标准输出设备显示器、对在外存磁盘上的文件和对内存中指定的字符串存储空间(当然可用该空间存储任何信息)
进行输入输出这三个方面。对标准输入设备和标准输出设备的输入输出简称为标准I/O,对在外存磁盘上文件的输入输出简称为文件I/O,对内存中指定的字符串存储空间的输入输出简称为串I/O。
C++
语言系统为实现数据的输入和输出定义了一个庞大的类库,它包括的类主要有ios,istream,ostream,iostream,ifstream,ofstream,fstream,istrstream,ostrs
tream,strstream等,其中ios为根基类,其余都是它的直接或间接派生类。
ios为根基类,它直接派生四个类:输入流类istream、输出流类ostream、文件流
基类fstreambase和字符串流基类strstreambase,输入文件流类同时继承了输入流
可以把流看作是一种数据的载体,通过它可以实现数据交换和传输。就像水流是一串水组成的 计算机中的数据流就是由一串数据组成的东西。C++的输入输出流及文件 *** 作
1. C++保留C的输入输出单个字符的函数
(1) putchar(c) —— 字符输出
例程:
#include
using 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<<"dec:"<
cout.put(97) //显示a字符--使用cout的成员函数put(c)
cin成员函数get()
(1) 不带参数的
char c=cin.get() //用cin的成员函数get()从键盘读入一个字符到c中去
(2) 带一个参数的
cin.get(ch)//从输入的流中接受一个字符,并赋给字符变量ch
(3) 带三个参数的
cin.get(字符数组,字符的个数n,终止字符)
例程:
#include
using namespace std
int main()
{
char ch[20]
cout<<"in put a string:"<
cin.get(ch,10,'/n') /*取得输入流的前10-1=9个字符赋值给ch数组的前9个元素,并规定换行符为为输入流的终止结束符*/
cout<
return 0
}
如输入:1 2 34567890 //按换行键终止流输入
则输出:1 2 34567 //只读得前9个送入ch数组中
cin的成员函数getline() ——从输入流中读入一行字符
cin.getline(字符数组(或字符指针),字符的个数n,终止字符)
例程:
#include
using namespace std
int main()
{
char ch[20]
cout<<"input a string:"<
cin>>ch
cout<<"The string read with cin is:"<
cin.getline(ch,20,'/') //读取19个字符到ch数组或遇到'/'结束
cout<<"The second part is:"<
cin.getline(ch,20) //读取19个字符到ch数组或遇到'/n'结束,遇到'/'仍作为字符读入
cout<<"The third part is:"<
return 0
}
istream类的其他的成员函数如:eof(),在输入流中读取数据,如果到达末尾(遇到文件结束符),则eof()返回真,否则为假.
例程:
#include
using namespace std
int main()
{
char c
while(!cin.eof())//若未遇到文件结束符
if((c=cin,get())!=' ') //检查读入的字符是否为空格字符
cout.put(c)
return 0
}
4. 磁盘文件的打开和关闭
打开
ofstream outfile
if(outfile.open("f1.data",ios::app)==0)// 打开
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 strgetline(infile,str)) //逐行打开并逐行显示,因此在循环中实现
cout<infile.close()
return 0
}
或把for(string strgetline(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 strgetline(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=0c[i]!=0i++) //对字符逐个处理,知道遇到'/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 //遇空格结束
输出:jkljkl
2、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=0i<3i++)
{
cout<<"/n请输入第"<cin.getline(m[i],20)
}
cout<for(int j=0j<3j++)
cout<<"输出m["<
}
请输入第1个字符串:
kskr1
请输入第2个字符串:
kskr2
请输入第3个字符串:
kskr3
输出m[0]的值:kskr1
输出m[1]的值:kskr2
输出m[2]的值:kskr3
4、getline() // 接受一个字符串,可以接收空格并输出,需包含“#include”
#include
#include
using namespace std
main ()
{
string str
getline(cin,str)
cout<}
输入:jkljkljkl
输出:jkljkljkl
输入:jkl jfksldfj jklsjfl
输出:jkl jfksldfj jklsjfl
和cin.getline()类似,但是cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数
5、gets()// 接受一个字符串,可以接收空格并输出,需包含“#include”
#include
#include
using namespace std
main ()
{
char m[20]
gets(m) //不能写成m=gets()
cout<}
输入:jkljkljkl
输出:jkljkljkl
输入:jkl jkl jkl
输出:jkl jkl jkl
类似cin.getline()里面的一个例子,gets()同样可以用在多维数组里面:
#include
#include
using namespace std
main ()
{
char m[3][20]
for(int i=0i<3i++)
{
cout<<"/n请输入第"<gets(m[i])
}
cout<for(int j=0j<3j++)
cout<<"输出m["<
}
请输入第1个字符串:
kskr1
请输入第2个字符串:
kskr2
请输入第3个字符串:
kskr3
输出m[0]的值:kskr1
输出m[1]的值:kskr2
输出m[2]的值:kskr3
自我感觉gets()和cin.getline()的用法很类似,只不过cin.getline()多一个参数罢了;
这里顺带说明一下,对于本文中的这个kskr1,kskr2,kskr3 的例子,对于cin>>也可以适用,原因是这里输入的没有空格,如果输入了空格,比如“ks kr jkl[回车]”那么cin就会已经接收到3个字符串,“ks,kr,jkl”;再如“kskr 1[回车]kskr 2[回车]”,那么则接收“kskr,1,kskr”;这不是我们所要的结果!而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"
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)