浅谈c语言输入输出流格式

浅谈c语言输入输出流格式,第1张

printf格式输出函数,作用是向终端输出若干个任意类型的数据

一般格式为printf(“格式控制”,输出表列)

例printf(“%d,%c\n”,i,c)

格式控制作用:

1. 格式说明(%..):将输出的数据转换为指定的格式输出

2. 普通字符。按原样输出

格式控制中的普通字符按原样输出

例printf(“%d  %d”,a,b)

  printf(“a=%d  b=%d”,a,b)

在第二个函数中双引号内的字符,除了两个%d以外,其他的普通字符按原样输出,如果a,b的值分别为3,4,则输出为a=3  b=4中间有空格

3. 格式字符:

1 d格式符。%d按十进制整数数据实际长度输出;%md指定宽度(位数)m,如果数据位数小于m,则左端补空格;%ld长整型数据

2 o格式符。以八进制整数形式输出

3 x格式符。以十六进制数形式输出

4 u格式符。以十进制整数形式输出无符号数

5 c格式符。用来输出一个字符,一个整数,只要它的值在0~255之间,也可以用%c使之按字符形式输出,在输出前,系统会将该整数作为ASCII码转换成相应的字符;反之,一个字符数据也可以用整数形式输出。

6 s格式符。用来输出一个字符串。%s;%ms,输出的字符串占m列,如果字符串本身长度大于m,则突破m限制,将字符串全部输出,如果小于m,则左补空格;%-ms,如果串长小于m,则在m列范围内,字符串向左靠,右补空格;%m.ns,输出m列,但只取字符串左端n个字符。这n个字符输出在m列右侧,左补空格;%-m.ns,取n个字符输出在m列范围的左侧,右补空格,如果n>m,则m自动取n值,即保证n个字符正常输出

7 f格式符。用来输出实数(包括单双精度),以小数形式输出。%f,不指定字段宽度,使整数部分全部输出,并输出6位小数。但注意,在输出的数字中并非全部数字都是有效数字,单精度实数的有效数字一般为7位;%m.nf,指定输出的数据共占m列,其中有n位小数。如果数值长度小于m,则左端补空格;%-m.nf与%m.nf基本相同,只是使输出的数值向左端靠,右端补空格。

8 e格式符。以指数形式输出实数

9 g格式符。用来输出实数,根据数值的大小,自动选f格式或者e格式,且不输出无意义的零。P80

格式字符

说明

d ,i

以带符号的十进制形式输出整数

O

以八进制无符号形式输出整数

X,x

以十六进制无符号形式输出整数,用x则百偶是输出十六进制数的a~f时以小写形式输出。用X时,则以大写字母输出

u

以无符号十进制形式输出整数

c

以字符形式输出,只输出一个字符

s

输出字符创

f

以小数形式输出单双精度数,隐含输出7位小数

e,E

以指数形式输出是说,用e时指数以e表示,用E时指数以E表示

g,G

选用%f或%e格式中输出宽度较短的一种格式,不输出无意义的0.用G时,若以指数形式输出,则指数以大写表示

字符

说明

l

用于长整型整数,可加载个师傅d,o,x,u前面

m

数据最小宽度

n

对实数,表示输出n位小数,对字符串,表示截取的字符个数

-

输出的数字或字符在域内向左靠

注意:除了X,E,G外,其他格式字符必须用小写字母;可以在格式控制字符串内包含转义字符;格式符之间可以加入修饰符;用连续两个%来输出%

scanf(格式控制,地址表列)

scanf(“%d%d%d”,&a,&b,&c)

&为地址运算符,&a指a在内存中的地址。

1.用%d%d%d输入数据时不能用逗号做两个数据间的分隔符可用空格

如果%d和%d之间有n个空格,则输入时对应的位置应该有多于n个空格来分隔

总之,%d与%d之间有什么简单符号,输入信息时候就要将这些符号加上,或者格式控制里是a=%d,则输入数据时候也得输入a=某个数据

2.用%c格式输入字符时候,空格字符和转义字符都作为有效字符输入

例如:scanf(“%c%c%c”,&c1,&c2,&c3)若输入“a空格b空格c”则c1为a,c2为空格,c3为b,正确的输入法为“abc”字符间没有空格

3.在输入数据时候,遇到以下情况时,认为该数据结束①遇空格,或按回车,或跳格键;②指定宽度结束,如%3d;③遇非法输入

可以把流看作是一种数据的载体,通过它可以实现数据交换和传输。就像水流是一串水组成的 计算机中的数据流就是由一串数据组成的东西。

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"

在 C 语言中,常用的输入输出函数包括以下几个:

1. `printf()` 函数:用于输出信息到控制台或者文件,可以输出各种类型的数据,例如整数、浮点数、字符、字符串等。它的格式字符串可以通过占位符来指定输出数据的格式,类似于其他编程语言中的字符串格式化功能。

2. `scanf()` 函数:用于从控制台或者其他标准输入设备中读取输入数据,等待用户输入数据并读入数据。scanf() 函数的格式字符串中可以使用占位符来指定各种类型的输入数据,例如整数、浮点数、字符、串等。

3. `puts()` 函数:用于在控制台或者文件中输出一个字符串,并自动在字符串的末尾添加一个换行符。如果需要输出多行字符串,可以多次调用 puts() 函数来输出每行字符串。

4. `gets()` 函数:用于从标准输入设备中读取一个字符串。它可以读取包含空格和其他特殊字符的字符串,并将其保存到指定的字符数组中,直到读取到换行符为止。

这些输入输出函数是 C 语言中最常用的函数,可以方便地实现控制台的输入输出等功能。需要注意的是,这些函数都是标准库函数,如果要使用它们,需要在程序中包含相应的头文件,如 `<stdio.h>`。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9989654.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存