C程序设计语言整理笔记(七)输入与输出

来源:互联网 发布:淘宝用户名可以更改吗 编辑:程序博客网 时间:2024/06/02 09:35

1.    标准输入/输出

Ø 最简单的输入机制是使用getchar()从标准输入中(键盘)一次读取一个字符:

          int getchar(void)

          getchar函数在每次被调用时返回下一个输入字符。若遇到文件尾,则返回EOF

Ø 在许多环境中,可使用符号<来实现输入重定向,它将把键盘输入替换为文件输入:

如果程序prog中使用了函数getchar,则命令行

prog < infile

将使得程序prog从输入文件infile(而不是键盘)中读取字符

     

Ø 函数 int putchar(int c)用于输出数据

putchar(c)将字符c送至标准输出上,在默认情况下,标准输出为屏幕显示

函数putchar将返回输出的字符,如果发生错误,则返回EOF

Ø 通常情况下,可以使用”>输出文件名的格式将输出重定向到某个文件中

如果程序prog中使用了函数putchar,则命令行

prog >输出文件名

将把程序prog的输出从标准输出设备重定向到文件中

 

Ø 如果系统支持管道,那么命令行:

prog | anotherprog

将把程序prog的输出从标准输出通过管道重定向到anotherprog的标准输入中

                                                             

2.    格式化输出——printf函数

     int printf(char *format, arg1, arg2, …)

     函数printf在输出格式format的控制下,将其参数进行转换与格式化,并在标准输  出设备上打印出来,它的返回值为打印的字符数

 

Ø 格式字符串包含两种类型的对象:

1.    普通字符

在输出时,普通字符将原样不动地复制到输出流中

2.    转换说明

转换说明并不直接输出到输出流中,而是用于控制printf中参数的转换和打印。

每个转换说明都由一个百分号字符(%)开始,并以一个转换字符结束

在字符%和转换字符中间可能依次包含下列组成部分:

Ø 负号:  用于指定被转换的参数按照左对齐的形式输出

Ø 数:     用于指定最小字段宽度。转换后的参数将打印不小于最小字段宽度的          字段。如果有必要,字段左边(如果使用左对齐方式,则为右边)多       余的字符位置用空格填充以保证最小字段宽

Ø 小数点:用于将字段宽度和精度分开

Ø 数:     用于指定精度,即指定字符串中要打印的最大字符数、浮点数小数点          后的位数、整型最少输出的数字数目

Ø 字母h,l:字母h表示将整数作为short类型打印

          字母l表示将整数作为long类型打印


     

  

Ø printf函数的运算顺序:从右向左计算

          int a = 1;

          printf (“%d, %d, %d\n”, a++, a++, a);

          => 2, 1, 3

 

          volatile int a = 1;  //申明a是易变的,防止编译器优化

          printf (“%d, %d, %d\n”, a++, a++, a);

          =>2, 1, 1

 

Ø 向一个指定的流输出

int fprintf (FILE *stream, const char *format, arg1, arg2, …)

          返回值是实际写入的字符数,若出错则返回一个负值

          printf (…)函数等价于 fprintf (stdout, …)

 

Ø 向一个指定的缓冲区输出

          int sprintf (char *s, char *format, arg1, arg2, …)

          函数的输出被写入到字符串s中,并以’\0’结束。s必须足够大,以足够容纳下输            出的结果。该函数返回实际输出的字符数,不包括’\0’


 

3.    格式化输入——scanf函数

     int scanf (const char *format, …)

     scanf函数从标准输入中读取字符序列,按照format中的格式说明对字符序列进行解释,并把结果保存到其余的参数中

 

Ø scanf函数扫描完其格式串,或者碰到某些输入无法与格式控制说明匹配的情况时,该函数将终止,同时,成功匹配并赋值的输入项的个数将作为函数值返回,所以,该函数的返回值可以用来确定已匹配的输入项的的个数。如果到达文件的结尾,该函数将返回EOF

Ø 返回EOF0是不同的,0表示下一个输入字符与格式串中的第一个格式说明不匹配。

Ø 下一次调用scanf将从上一次转换的最后一个字符的下一个字符开始继续搜索

 

Ø int fscanf (FILE *stream, const char *format, …)

fscanf函数根据格式串format从流stream中读取输入,并把转换后的值赋给后续各个参数,其中的每个参数都必须是一个指针。当格式串format用完时,函数返回。如果到达文件的末尾或在转换输入前出错,该函数返回EOF;否则,返回实际被转换并赋值的输入项的数目

scanf(…)函数与fscanf(stdin, …)相同

 

Ø int sscanf(char *string, char *format, arg1, arg2, …)

用于从一个字符串(而不是标准输入)中读取字符序列

它按照格式参数format中规定的格式扫描字符串string,并把结果分别保存到arg1, arg2, …这些参数中。这些参数必须是指针

 

     scanf, fscanf, sscanf函数的所有参数都必须是指针

     scanf(“%d”, n);     错误

     scanf(“%d”, &n);   正确

     编译器在编译时一般检测不到这类错误