一、scanf()的返回值

  • scanf()函数会返回成功读取的项数
  • 如果没有读取任何项,而且需要读取的是一个数字,但是却读取了非数字,那么就会返回0
  • 当检测到“文件结尾”的时候,会返回EOF(EOF是头文件stdio.h中的特殊值,通常用#define指令把EOF定义为-1

二、printf()和scanf()的*修饰符

  • 首先看一下printf的*的用法
#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 width:\n");
	scanf("%d", &width);
	printf("The number is :%*d:\n", width, number);
	printf("Now enter a width and a precision.\n");
	scanf("%d %d", &width, &precision);
	printf("Weight = %*.*f\n", width, precision, weight);
	printf("Done!\n");

	return 0;
}

23.1

  • 从上面的代码可以看的出来*其实用来指定宽度,还支持小数点后面的用法,表示保留几位小数
  • 下面我们再看一下scanf()的用法,它和printf()稍有不同
#include<stdio.h>
#pragma warning(disable:4996)
int D23_1_skip2(void) {
	int n;

	printf("Please enter three integers:\n");
	scanf("%*d %*d %d", &n);
	printf("The last integer was %d\n", n);

	return 0;
}

23.2

  • 把*放到%和转换字符之间,就会使的scanf()跳过相应的输出项,从上面的代码中可以看出,直接跳过了前两个整数。

三、关键概念

  • 字符串存储在一个数组中,都是以一个叫做空字符的隐藏字符结尾
  • 最好用#indefine定义数字常量,用const关键字声明的变量为只读变量。
  • 空白字符(制表符、空格和换行符)在scanf()处理输入时,除了%c模式(读取一个字符),scanf()在读取输入的时候会跳非空白字符前的所有空白字符,直到遇到空白字符或者与转换说明不相符的字符。

四、总结

  • 字符串是一个处理单元的字符,C语言中会以空字符(ASCII码就是0)结尾的一系列字符。
  • strlen()函数(在string.h中),可以用于获取字符串的长度(末尾的空字符不计入在内)。
  • C预处理器为预处理器指令(以#符号开始)查找源代码程序,并且在开始编译程序之前,处理它们。
  • 处理器根据#include指令把另一个文件中的内容添加到该指令所在的位置。#define指令可以创建明示变量(符号常量)
  • limits.h和float.h头文件中用#define定义了一组表示整型和浮点型不同属性的符号常量。另外还可以使用const限定符来创建定义后不能修改的变量。

三、源码:

posted on 2020-09-18 00:13  心悦君兮君不知-睿  阅读(657)  评论(0编辑  收藏  举报