码迷,mamicode.com
首页 > 编程语言 > 详细

C语言(三)---输入和输出

时间:2017-10-22 21:07:23      阅读:324      评论:0      收藏:0      [点我收藏+]

标签:动态   ros   第一个   数列   格式   数值   -name   关系   符号   

一、输出

  输入输出:英文是Input/Output简称IO。

  C语言标准函数库中,提供了关于以下介绍的几种输出函数,(所有标准输入输出函数在调用前,必须先包含头文件stdio.h)

1.1 简单字符输出

1.1.1 putchar函数

  putchar函数:将指定的(表达式的值所对应的)字符输出到标准输出终端(屏幕)上。

  格式:int putchar( int c );

  返回值:返回已写好的字符。 若要指示错误或文件结尾条件,putchar 返回 EOF;

  例如:putchar(‘a’+3);打印的结果是d,是一个字符而不是数值。

  a的ASCII码是97,加3是ASCII码表中100对应的字符就是d。

  例如:putchar(99);打印的结果是c,代入一个数字打印出的是一个字符。

  就如同代入的是学号,打印出来的是姓名一样。

1.1.2 putc函数

  putc函数:将指定的字符输出到指定标准输出流(屏幕或一个文件)中。

  格式:int putc( int c, FILE *stream ); 

  c   要写入的字符。
  stream  指向 FILE 结构的指针。
  返回值:返回已写好的字符。若要指示错误或文件结尾情况,putc 返回 EOF;

  等价关系:putc的功能中包含putchar的功能。

  putchar(c)等价于putc(c,stdout)。

  例如:putc(‘A’,stdout)等价于putchar(‘A’)

1.1.3 fputc函数

  • 函数原型:int fputc( int c, FILE *stream );
  • 参数:
    • c:要写入的字符。
    • stream指向 FILE 结构的指针。
  • 返回值:返回一个写好的字符。EOF 的返回值指示错误
  • putc等效,但是仅实现为函数,而不是函数和宏。

1.2 多种格式输出

1.2.1 printf函数

  c语言中格式化输出的函数,用于向终端(屏幕)要输出的的各种类型的数据的常量或变量,除了可以输出字母、数字、空格和一些数字符号以外,还可以使用一些转义字符表示特殊的含义。

  格式:int printf( const char *format [, argument]... );

    技术分享

  • printf函数打印时的占位控制:
    • 在printf函数的控制串内,%符号与控制符之间的数字是用来控制占位的。例如:printf(“%8.3f”,34.678f);8代表包括小数点总共占用8个空位,.3代表保留3位小数打印。
    • %之后带-符号代表在所占用的空间内左对齐,缺省不带-符号是右对齐。例如:printf(“价格=%-8.3f”,34.67f);还是占用8个空位但是,与前面不同之处是左对齐。
    • 如果%后面是0.x代表不占用多余空位,只控制保留的小数位。例如:printf(“价格=%0.3f”,34.6f);以上是printf函数对于浮点数的占位和对其管理。
    • 对于整数和字符串输出只有占位控制和对齐控制,没有小数点后面的控制。例如:printf(“学号:%-8d姓名:%-10s\n”);8和10代表的是占位管理,-符号代表左对齐,缺省不带-符号是右对齐。

  printf 类型字段字符:

类型字符

参数

输出格式

c

字符

printf 函数一起使用时,指定单字节字符;与 wprintf 函数一起使用时,指定宽字符。

C

字符

printf 函数一起使用时,指定宽字符;与 wprintf 函数一起使用时,指定单字节字符。

d

Integer

带符号十进制整数。

i

Integer

带符号十进制整数。

o

Integer

无符号八进制整数。

u

Integer

无符号十进制整数。

x

Integer

无符号十六进制整数;使用“abcdef.”

X

Integer

无符号十六进制整数;使用“ABCDEF.”

e

浮点

有符号的值,形式为 [ – ]d .dddd e [ sign]dd[d],其中 d 是一个十进制数,dddd 是一个或多个十进制数,dd[d] 是两三个十进制数,具体取决于 输出格式和指数大小,并且 符号为 + 或 –。

E

浮点

e 格式相同,除非 E(而非 e)引入了指数。

f

浮点

有符号的值,形式为 [ – ]dddd .dddd,其中 dddd 是一个或多个十进制数。 小数点前的数字位数取决于数字的度量值,小数点后的数字位数取决于所需精度。

g

浮点

有符号的值显示为 f 或 e 格式,取其中对于给定的值和精度更为精简一个。 仅当值的指数小于 -4 或大于等于 precision 参数时,使用 e 格式。 截去尾随零,仅当后跟一个或多个数字时,才会显示小数点。

G

浮点

g 格式相同,除非 E(而非 e)引入指数(如果适用)。

a

浮点

有符号十六进制双精度浮点值,形式为 [?]0x h.hhhh  dd,其中 h.hhhh 是尾数的十六进制数(使用小写字母),dd 是指数的一个或多个数字。 精度指定此点后的数字位数。

A

浮点

有符号十六进制双精度浮点值,形式为 [?]0X h.hhhh  dd,其中 h.hhhh 是尾数的十六进制数(使用大写字母),dd 是指数的一个或多个数字。 精度指定此点后的数字位数。

n

指向整数的指针

目前成功写入流或缓冲区的字符数。 此值存储在地址作为参数的整数中。 请参阅下文中的安全说明。

p

指针类型

将参数显示为十六进制数中的地址。

s

字符串

printf 函数一起使用时,指定单字节或多字节字符串;与 wprintf 函数一起使用时,指定宽字符字符串。 于第一个空字符之前或达到 precision 值之前,显示字符。

S

字符串

printf 函数一起使用时,指定宽字符字符串;与 wprintf 函数一起使用时,指定单字节或多字节字符串。 于第一个空字符之前或达到 precision 值之前,显示字符。

Z

ANSI_STRING 或 UNICODE_STRING 结构

技术分享ANSI_STRING 的地址或 技术分享UNICODE_STRING 结构作为参数传递时,显示包含在缓冲区中的字符串(此结构的 Buffer 字段指向此缓冲区)。 使用 w 的长度修饰符前缀指定 UNICODE_STRING 参数,例如 %wZ。 结构的 Length 字段必须设置为字符串的长度(以字节为单位)。 结构的 MaximumLength 字段必须设置为缓冲区的长度(以字节为单位)。

通常情况下,Z 类型字符仅在使用格式规范(如 dbgPrint 和 kdPrint)的驱动程序调试函数中使

二、输入

2.1 多种格式输入---scanf函数

  scanf函数:格式化输入函数,即按控制字符串内指定的各种格式,从键盘上把数据输入到指定的变量之中。

  格式:int scanf( const char *format [,argument]... );

    format窗体控件字符串。

    argument可选参数。

    返回成功转换和赋值的字段数;返回值不包括读取,但未赋值的字段。 返回值为 0 表示未分配字段。

  • 与printf相同之处是:
    • 控制字符串内的每个%后面必须跟一个控制字符,参数列表中的参数都必须与控制字符的个数和类型相匹配
  • 与printf的不同之处是:
    • scanf的参数列表中,每一个变量之前都必须要带上取地址符号(&)。代表要将参数列表中所有变量的地址一一传递给系统,操作系统要按照给定变量的地址,将用户输入的数据传递给参数列表中每一个对应的变量。(只有数组变量可以不用取地址,因为数组变量自身就是一个内存地址。printf的参数列表中,所有变量是不用取地址直接代入的。如果scanf函数像直接代入变量不取地址,执行时会因数据送错地址造成整个程序崩溃。
    • scanf的控制字符串内除了控制字符以外,只能指定间隔符空格或逗号。不能像printf函数那样,随意在控制字符之间夹杂其他的文字。

  技术分享

2.2 字符输入

2.2.1 getc

  getc函数:int getc( FILE *stream );

  stream  输入流。

  返回值:返回读取的字符。若要指示读取错误或文件结束的条件,getc 返回EOF

2.2.2 getchar

  getchar函数:从stdio流中读字符,它从标准输入里读取下一个字符。
  格式:int getchar(void);

  int c = getchar();

  等价于:int c=getc(stdin)
  也等价于:int c;scanf(“%c”,&c);

  以上三中形式单独调用时,最好在之前调用一个函数来清理输入流:fflush(stdin);否则,可能获取不到新输入的内容,而是获得了上一次输入时的回车符。

三、字符串输入输出

3.1输入函数

3.1.1 gets 函数

  gets函数:从stdin流中读取字符串,类似于scanf(“%s”,&x);

  • 函数原型:char *gets( char *buffer );
  • 参数:buffer   输入字符串的存储位置。
  • 返回值:如果成功,返回参数。错误返回NULL
  • gets 函数从标准输入流 stdin 中读取一行并保存在 buffer中. 行包含所有字符模式将匹配第一个换行符 (“\n”)。 gets 在返回行之前使用 null 字符 (“\0 ")然后替换换行符。相反,fgets 函数保留换行符。

3.1.2 fgets 函数

  • 函数原型:char *fgets( char *str, int n, FILE *stream );
  • 参数:
    • str:数据的存储位置
    • n:要读取的最大字符数
    • stream:指向FILE结构的指针
  • 返回值:成功,返回打印出的字符串;失败返回NULL    

  fgets 函数读取输入 stream 参数的字符串并将其存储到 str中。 fgets 读取从当前流位置的字符,并且包括第一个字符,到流的末尾,或直至读取字符数 - 1 与 n 相等。 存储在 str 中追加 null 字符。 如果读取,换行字符包括在字符串中。

3.2 输出函数

3.2.1 puts函数

  • puts函数:用来向标准输出设备写字符串并换行,类似于printf(“%s\n”,x);
  • 函数原型:int puts( const char *str );
  • 参数:str  输出字符串
  • 返回值:如果成功返回非负值。失败返回EOF

  puts 函数写入 str到标准输出流 stdout,替换字符串的终止 null 字符 (“\0 ") 将一个换行符 (“\n”) 在输出流。

3.2.2 fputs函数

  • 函数原型:int fputs( const char *str, FILE *stream );
  • 参数:
    • str    输出字符串
    • stream   指向 FILE 结构的指针    
  • 返回值:成功返回一个非负值,失败,返回EOF  

四、关键字

4.1 sizeof---获取类型的大小(以字节为单位)

  用法:对于所有其他类型(包括结构),sizeof 运算符只能在不安全代码块中使用。

  sizeof unary-expression sizeof ( type-name )

  sizeof 运算符的结果为 size_t 类型,它是包含文件 STDDEF.H 中定义的整数类型。 利用此运算符,你可以避免在程序中指定依赖于计算机的数据大小。

  sizeof 的操作数可以是下列项之一:

  类型名称。 若要将 sizeof 用于类型名称,则该名称必须用括号括起。

  一个表达式。 当用于表达式时,无论是否使用括号都可指定 sizeof。 不计算表达式。

  sizeof 运算符应用到 char 类型的对象时,它将生成 1。 sizeof 运算符应用到数组时,它将产生该数组的字节总数,而非由数组标识符表示的指针的大小。 若要获取由数组标识符表示的指针的大小,请将其作为参数传递给使用 sizeof 的函数。

  sizeof 运算符应用到 class、struct 或 union 类型时,结果为该类型的对象中的字节数,以及添加的用于在字边界上对齐成员数据的任何填充。 结果不一定对应于通过将各个成员的存储需求相加计算出的大小。

  sizeof 运算符永远不会产生 0,即使对于空类也是如此。

  sizeof 运算符不能用于以下操作数:

  • 函数。 (但是,sizeof 可应用于指向函数的指针。)

  • 位域。
  • 未定义的类。
  • void 类型。
  • 动态分配的数组。
  • 外部数组。
  • 不完整类型。
  • 带括号的不完整类型的名称。

  sizeof 运算符应用于引用时,结果与 sizeof 应用到对象本身时的结果相同。

  如果某个未确定大小的数组是结构的最后一个元素,则 sizeof 运算符将返回没有该数组的结构的大小。

  sizeof 运算符通常用于通过使用以下形式的表达式计算数组中的元素数量:sizeof array / sizeof array[0]

  // Constant value 4:

  int intSize = sizeof(int);

4.2 _countof---计算静态分配的数组中元素的数量。

 

   函数原型:size_t _countof( array );
  返回数组中的元素个数
  确保 array 实际上是数组,而不是指针。 在 C 中,如果 _countof 是指针,则 array 将生成错误结果。 在 C++ 中,如果 _countof 是指针,则 array 将无法编译。
  必须包含头文件 stdlib.h

 

  int s[20];

  _countof(s); == sizeof(s)/sizeof(s[0]);

  

C语言(三)---输入和输出

标签:动态   ros   第一个   数列   格式   数值   -name   关系   符号   

原文地址:http://www.cnblogs.com/kele-dad/p/7710678.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!