上面结果中的地址值在不同计算机上可能不同。 例1.中第一条语句#include的含义是调用另一个文件stdio.h, 这 是一个头文件, 其中包括全部标准输入输出库函数的数据类型定义和函数说明。 Turbo C2.0对每个库函数便用的变量及函数类型都已作了定义与说明, 放在相应 头文件"*.h"中, 用户用到这些函数时必须要用#include<*.h>或#include"*. h" 语句调用相应的头文件, 以供连接。若没有用此语句说明, 则连接时将会出现错 误。 二、scanf()函数 scanf()函数是格式化输入函数, 它从标准输入设备(键盘) 读取输入的信息。 其调用格式为: scanf("<格式化字符串>", <地址表>); 格式化字符串包括以下三类不同的字符; 1. 格式化说明符: 格式化说明符与printf()函数中的格式说明符基本相同。 2. 空白字符: 空白字符会使scanf()函数在读操作中略去输入中的一个或多 个空白字符。 3. 非空白字符: 一个非空白字符会使scanf()函数在读入时剔除掉与这个非 空白字符相同的字符。 地址表是需要读入的所有变量的地址, 而不是变量本身。这与printf()函数 完全不同, 要特别注意。各个变量的地址之间同","分开。 例2: main() { int i, j; printf("i, j=? "); scanf("%d, %d", &i, &j); } 上例中的scanf()函数先读一个整型数, 然后把接着输入的逗号剔除掉, 最 后读入另一个整型数。如果","这一特定字符没有找到, scanf()函数就终止。若 参数之间的分隔符为空格, 则参数之间必须输入一个或多个空格。 说明: (1). 对于字符串数组或字符串指针变量, 由于数组名和指针变量名本身就 是地址, 因此使用scanf()函数时, 不需要在它们前面加上"&"操作符。 例3 mian() { char *p, str[20]; scanf("%s", p); /*从健盘输入字符串*/ scanf("%s", str); printf("%s ", p); /*向屏幕输出字符串*/ printf("%s ", str); }
(2). 可以在格式化字符串中的"%"各格式化规定符之间加入一个整数, 表示 任何读操作中的最大位数。 如例3中若规定只能输入10字符给字符串指针p, 则第一条scanf() 函数语句 变为 scanf("s", p); 程序运行时一旦输入字符个数大于10, p就不再继续读入, 而后面的一个读 入函数即scanf("%s", str)就会从第11个字符开始读入。 实际使用scanf()函数时存在一个问题, 下面举例进行说明: 当使用多个scanf()函数连续给多个字符变量输入时, 例如: main() { char c1, c2; scanf("%c", &c1); scanf("%c", &c2); printf("c1 is %c, c2 is %c", c21, c2); }
运行该程序, 输入一个字符A后回车 (要完成输入必须回车), 在执行scanf ("%c", &c1)时, 给变量c1赋值"A", 但回车符仍然留在缓冲区内, 执行输入语句 scanf("%c", &c2)时, 变量c2输出的是一空行, 如果输入AB后回车, 那么输出结 果为: c1 is A, c2 is B。 要解决以上问题, 可以在输入函数前加入清除函数fflush()( 这个函数的使 用方法将在本节最后讲述)。修改以上程序变成: #include main() { char c1, c2; scanf("%c", &c1); fflush(stdin); scanf("%c", &c2); printf("c1 is %c, c2 is %c", c1, c2); }
1.1.2 非格式化输入输出函数 非格式化输入输出函数可以由上面讲述的标准格式化输入输出函数代替, 但 这些函数编译后代码少, 相对占用内存也小, 从而提高了速度, 同时使用也比较 方便。下面分别进行介绍。 一、puts()和gets()函数 1. puts()函数 puts()函数用来向标准输出设备(屏幕)写字符串并换行, 其调用格式为: puts(s); 其中s为字符串变量(字符串数组名或字符串指针)。 puts()函数的作用与语printf("%s ", s)相同。 例4: main() { char s[20], *f; /*定义字符串数组和指针变量*/ strcpy(s, "Hello! Turbo C2.0"); /*字符串数组变量赋值*/ f="Thank you"; /*字符串指针变量赋值*/ puts(s); puts(f); }
说明: (1). puts()函数只能输出字符串, 不能输出数值或进行格式变换。 (2). 可以将字符串直接写入puts()函数中。如: puts("Hello, Turbo C2.0");
2. gets()函数 gets()函数用来从标准输入设备(键盘)读取字符串直到回车结束, 但回车符 不属于这个字符串。其调用格式为: gets(s); 其中s为字符串变量(字符串数组名或字符串指针)。 gets(s)函数与scanf("%s", &s)相似, 但不完全相同, 使用scanf("%s", &s) 函数输入字符串时存在一个问题, 就是如果输入了空格会认为输入字符串结束, 空格后的字符将作为下一个输入项处理, 但gets() 函数将接收输入的整个字符 串直到回车为止。 例5 main() { char s[20], *f; printf("What’s your name? "); gets(s); /*等待输入字符串直到回车结束*/ puts(s); /*将输入的字符串输出*/ puts("How old are you?"); gets(f); puts(f); }说明: (1). gets(s)函数中的变量s为一字符串。如果为单个字符, 编译连接不会 有错误, 但运行后会出现"Null pointer asignmemt"的错误。
|