700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > c语言输出数以空格格开 C语言输入输出函数格式详解.docx

c语言输出数以空格格开 C语言输入输出函数格式详解.docx

时间:2022-08-04 13:52:17

相关推荐

c语言输出数以空格格开 C语言输入输出函数格式详解.docx

1、输入和输出:

输入:输入也叫读,数据由内核流向用户程序

输出:输出也称写、打印,数据由用户程序流向内核

以下介绍一些输入输出函数,尽管都是一些有缺陷的函数,但比较适合初学者使用

2、printf用法(其缺陷在于带缓存)

printf输出时必须加上\n(刷新缓存)

解释:第一幅图没有加\n,不会刷新缓存区,则不会打印出来;第二幅图是因为主函数结束时刷新了缓存区,但由于没有换行符,所以没有换行便显示了后面的内容;第三幅图时正常打印。

变量定义的是什么类型,在printf打印时就需要选择什么格式符,否则会造成数据的精度丢失(隐式强转),甚至会出现错误

修饰符

功能

m

输出数据域宽,数据长度m,则自动取n值,即保证n个字符正常输出。

G、f格式:用来输出实数(包括单、双精度),以小数形式输出。有以下几种用法:

%f:不指定宽度,整数部分全部输出并输出6位小数。

%m.nf:输出共占m列,其中有n位小数,如数值宽度小于m左端补空格。

%-m.nf:输出共占n列,其中有n位小数,如数值宽度小于m右端补空格。

对于单精度数,使用%f格式符输出时,仅前7位是有效数字,小数6位

对于双精度数,使用%lf格式符输出时,前16位是有效数字,小数6位

H、e格式:以指数形式输出实数。可用以下形式:

%e:数字部分(又称尾数)输出6位小数,指数部分占5位或4位。

%m.ne和%-m.ne:m、n和"-"字符含义与前相同。此处n指数据的数字部分的小数位数,m表示整个输出数据所占的宽度。

I、g格式:自动选f格式或e格式中较短的一种输出,且不输出无意义的零。

(4)h和l前缀及u

%hd --short int

%ld --long int

%lld --long long int

%lu --unsigned long

%llu --unsigned long long

%ho--八进制显示short整数

%lx--十六进制显示long整数

%le -以科学计数法表示long double

(5)特殊说明

A、需要打印%时,必须之前还要加上一个%

printf("%f%%", 1.0/3);输出0.333333%

B、*的用法

a、printf("%*d\n",8,100);结果:(前面空五格)100

b、int m = 8;printf("%*d\n",m,100);结果:(前面空五格)100

c、char ch[20];printf("%*.*s\n",m,n,ch);说明:前边的*定义的是总的宽度,后边的定义的是输出的个数。分别对应外面的参数m和n。我想这种方法的好处是可以在语句之外对参数m和n赋值,从而控制输出格式。

C、%n的用法:可以将所输出字符串的长度值赋给一个变量

int slen;printf("hello world%n", &slen);执行后变量slen被赋值为11

3、scanf函数(主要缺陷就是在缓冲区制造垃圾字符,不建议太过复杂的用法)

(1)结束条件

A、空格、TAB或回车

B、宽度结束

C、非法输入(比如程序里scanf中是%d的形式,结果输入的时候输入一个浮点类型的数)

(2)格式说明符

(3)scanf函数返回正确读取的元素的个数

int a,b,c;

scanf("%d%d%d",&a,&b,&c);//不能忘了写取地址符

正确输入时其返回值为3

(4)输入的格式要与程序里的格式保持一致

int a,b,c;

scanf("%d,%d,%d",&a,&b,&c);

输入的时候要输入2,3,4才是正确的

(5)抑制符*

这里跟printf中不同,他表示指定输入项读入后不赋给变量

int a,b;

scanf("%3d%*4d%f",&a,&b);

printf("a = %d,b = %f\n",a,b);

则:输入1234567890,输出为:a = 123,b = 890.000000

(6)垃圾字符(详见4getchar中的解释)

4、字符输入输出getchar和putchar

(1)putchar

A、在理解getchar()之前,首先搞清楚一个概念:

当从键盘上输入字符(数字、字符、符号)时,系统是默认先把输入的内容先存放在缓存空间上,当按下回车(Enter)键后getchar(),才开始从缓存空间逐一开始读取数据,注意getchar(),读取数据是逐一、单个读取的,也就是一次只读取一个字符的值,返回对应字符的ASCII码值。

B、理解上面内容,那么:

a、如果想要检测输入的字符是哪一个,可以用getchar()和对应字符的ASCII值进行比较,注意比较的形式必须是:

例如:if(getchar() != a || getchar() != \n)的这种形式,即检测从键盘上输入的是不是a或者回车。

b、getchar()从缓存里面读取数据,直到它读取到回车键时才结束

c、如果从键盘上输入一连串的字符

例如:输入adndjdjejd3458jjjfkal按下回车键(他也会被getchar读取),缓存区中内容为adndjdjejd3458jjjfkal\n

d、scanf()函数从缓存区读取数据的时候,不读取回车键,不返回回车键的值;getchar()函数从缓存区读取数据的时候,读取回车键,而且会将回车键的值进行返回,同时读取回车后结束本次读入

那么,在使用完scanf或者getchar之后如果还有输入函数,甚至scanf遇到非法输入结束,下一个函数必然会读取他们在缓冲区遗留的垃圾,这就是其缺陷所在。

(2)putchar不带自动换行

举例:

1、/*输入a b时取到的ch2是空格(输入时产生的)*/

#include int main(int argc, const char *argv[])

{

char ch1;

char ch2;

char ch3;

ch1 = getchar();

ch2 = getchar();

ch3 = getchar();

printf("mun = %d\n",ch2);

putchar(\n);

printf("ch1 = %c, ch2 = %c\n",ch1,ch2);

return 0;

}

5、字符串输入输出gets和puts

(1)gets函数不以空格作为字符串输入结束的标志,而以回车作为结束标志。

缺陷:由于c语言中数组的长度必须事先给定,所以输入很容易超出这个长度,数组越界(这是很严重的问题)

(2)puts函数在输出字符串时,会自动追加\n。使用时,注意字符数组必须以\0结束。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。