一、scanf()的返回值
- scanf()函数会返回成功读取的项数
- 如果没有读取任何项,而且需要读取的是一个数字,但是却读取了非数字,那么就会返回0
- 当检测到“文件结尾”的时候,会返回EOF(EOF是头文件stdio.h中的特殊值,通常用#define指令把EOF定义为-1
二、printf()和scanf()的*修饰符
#include<stdio.h>
#pragma warning(disable:4996)
int D22_1_varwid(void) {
unsigned width, precision;
int number = 256;
double weight = 242.5;
printf("Enter a field
");
scanf("%d", &width);
printf("The number is :%*d:
", width, number);
printf("Now enter a width and a precision.
");
scanf("%d %d", &width, &precision);
printf("Weight = %*.*f
", width, precision, weight);
printf("Done!
");
return 0;
}
- 从上面的代码可以看的出来*其实用来指定宽度,还支持小数点后面的用法,表示保留几位小数
- 下面我们再看一下scanf()的用法,它和printf()稍有不同
#include<stdio.h>
#pragma warning(disable:4996)
int D23_1_skip2(void) {
int n;
printf("Please enter three integers:
");
scanf("%*d %*d %d", &n);
printf("The last integer was %d
", n);
return 0;
}
- 把*放到%和转换字符之间,就会使的scanf()跳过相应的输出项,从上面的代码中可以看出,直接跳过了前两个整数。
三、关键概念
- 字符串存储在一个数组中,都是以一个叫做空字符的隐藏字符结尾
- 最好用#indefine定义数字常量,用const关键字声明的变量为只读变量。
- 空白字符(制表符、空格和换行符)在scanf()处理输入时,除了%c模式(读取一个字符),scanf()在读取输入的时候会跳非空白字符前的所有空白字符,直到遇到空白字符或者与转换说明不相符的字符。
四、总结
- 字符串是一个处理单元的字符,C语言中会以空字符(ASCII码就是0)结尾的一系列字符。
- strlen()函数(在string.h中),可以用于获取字符串的长度(末尾的空字符不计入在内)。
- C预处理器为预处理器指令(以#符号开始)查找源代码程序,并且在开始编译程序之前,处理它们。
- 处理器根据#include指令把另一个文件中的内容添加到该指令所在的位置。#define指令可以创建明示变量(符号常量)
- limits.h和float.h头文件中用#define定义了一组表示整型和浮点型不同属性的符号常量。另外还可以使用const限定符来创建定义后不能修改的变量。
三、源码: