日期:2014-05-16 浏览次数:20873 次
在学习C语言的时候,基本的输入输出是非常重要的,因为我们时常要接收用户的输入,而且时常要将结果输出到屏幕,因此非常有必要注重地学习一下。
最常用的两个基本IO函数莫过于 printf() 和 scanf() 了,下面首先来详细地介绍一下它们。来看第一个示例代码:
//example1.c #include <stdio.h> int main(void) { char a1 = 'A'; int a2 = 100; float a3 = 3.14; printf("a1=%c, a2=%d, a3=%f\n", a1, a2, a3); short int a4 = 10; long int a5 = 20; long long int a6 = 30; printf("a4=%hd, a5=%ld, a6=%lld\n", a4, a5, a6); }在上面的代码中,第8行和第13行就是将各种不同的数据类型打印出来,这里,%c %d %f %hd %ld %lld 这些称之为 格式控制符,其实,printf 和 scanf 函数之所以称为格式化IO函数,就是因为它们可以根据不同的格式控制符来处理各种类型的数据。
//example2.c #include <stdio.h> int main(void) { char a1 = 'A'; printf("%c", a1); // c就是character字符的意思 short a2 = 10; printf("%hd", a2); // h就是half一半的意思,表示a2是“半个”整型 int a3 = 100; printf("%d", a3); // d就是decimal十进制的意思 long a4 = 100; printf("%ld", a4); // l就是long的意思,表示a4是一个长整型 long long a5 = 100; printf("%lld", a5); // ll就是long long的意思,表示a4是一个长长整型 float f1 = 1.0; printf("%f", f1); // f就是float的意思,表示f1是一个单精度浮点型 double f2 = 1.0; printf("%lf", f2); long double f3 = 1.0; printf("%Lf", f3); // 注意下,长双精度不是 %llf ,而是 %Lf return 0; }下面来看看 scanf() ,这个函数是用来接收用户输入的,比 printf() 要考虑的更多一点,但是他们的格式控制符是一致的,也就是说,对于example2.c 里面看到的所有在 printf() 函数中使用的 格式控制符,在 scanf() 函数中完全适用,具体而言,scanf() 函数的用法如下:
/example3.c #include <stdio.h> int main(void) { char a1; scanf("%c", &a1); // 将用户输入的一个字符,放置在a1里 scanf("%hhd", &a1); // 将用户输入的一个数值,放置在a1里 short a2; scanf("%hd", &a2); // 将用户输入的一个短整型,放置在a2里 int a3; scanf("%d", &a3); // 将用户输入的一个整型,放置在a3里 long a4; scanf("%ld", &a4); // 将用户输入的一个长整型,放置在a4里 long long a5; scanf("%lld", &a5); // 将用户输入的一个长整型,放置在a5里 float f1; scanf("%f", &f1); // 将用户输入的一个单精度浮点数,放置在f1里 double f2; scanf("%lf", f2); // 将用户输入的一个双精度浮点数,放置在f2里 long double f3; scanf("%Lf", f3); // 将用户输入的一个长双精度浮点数,放置在f3里 return 0; }值得注意的是第 6、7行。我在《LINUX-C成长之路(二)》中讲过,char 型其实就是整型,特点是单字节整型,因此 a1 其实就是用来存储一个整数的,这时,当用户从键盘按下“9” 这个按键的时候,你的程序究竟是要存储一个字符 '9' 呢? 还是要存储一个数字 9 呢? 注意字符 '9' 跟数字 9 是不同的,如果是字符 '9' 的话,我们内存中存储的实际上市它所对应的ASCII码值,也就是57, 如果是数字 9 ,那就是在内存中直接存储 9 。
下面,研究一下一个很重要的问题:对于 scanf() 而言,假如你要用户输入一个整数,或者输入一个浮点数,但是用户很调皮,偏不输入一个规规矩矩的你想要的数据,你的程序会如何呢? 是立即就罢工甚至爆炸呢? 还是有足够的智能来处理这些小顽皮的捣蛋呢?请看下面的例子:
//example4.c #include <stdio.h> int main(void) { printf("请输入一个0-127之间的整数\n"); char c; scanf("%hhd", &c); printf("这个数对应的字符是: %c\n", c); return 0; }在example4.c 中,如果用户规规矩矩地输入你所要求的 0-127之间的 ASCII码值,程序当然可以顺利运行,打印出其对应的字符,但问题是假如用户输入诸如:
abcd 或者 80.5 或者 80abcd 或者 abcd80 , 但example4.c 遇到这样的输入的时候,它是无能为力的。因为它没有任何的输入确认的判断。
首先我们要知道一个事情,就是scanf() 这个函数的返回值,事实上,scanf() 这个函数的返回值代表了其正确地得到了用户输入的数据的个数,举个例子就明白了,就如有这个一段代码:
int a, b, c; int n; n = scanf("%d%d%d", &a, &b, &c);那么用户的输入分别是:
1,依次输入 10