c语言中有哪些格式说明符,在scanf 会在遇到空白字符(空格、制表符或换行符)时停止读取(即scanf会忽略空格)
在C语言的 scanf
函数中,有几个格式说明符在遇到空白字符(包括空格、制表符和换行符)时会停止读取。这些格式说明符通常用于读取特定类型的输入数据。以下是一些常用的格式说明符:
1.%d
或 %i
:用于读取整数。当 scanf
遇到非数字字符(包括空白字符)时,它会停止读取。
int num;
scanf("%d", &num); // 读取一个整数,遇到空白字符或非法字符时停止
2.%f
、%e
、%E
、%g
或 %G
:用于读取浮点数。这些格式说明符在遇到非数字字符或字符串表示结束时停止读取。
float f;
scanf("%f", &f); // 读取一个浮点数,遇到空白字符或非法字符时停止
3.%c
:用于读取一个字符。这个格式说明符比较特殊,它会读取输入流中的下一个字符,无论它是不是空白字符。如果你希望 scanf
在读取字符时跳过空白字符,你需要在 %c
之前显式地放置一个空格作为格式字符串的一部分。
char ch;
scanf(" %c", &ch); // 注意前面的空格,它告诉scanf跳过任何前导空白字符
4.%s
:用于读取字符串。这个格式说明符会在遇到空白字符时停止读取,并将读取的字符串(不包括终止的空字符)存储在提供的字符数组中。注意,%s
不会检查目标数组的大小,可能导致缓冲区溢出。为了避免这个问题,通常推荐使用 fgets
函数来读取字符串。
char str[50];
scanf("%s", str); // 读取一个字符串,直到遇到空白字符或达到数组大小限制(未检查)
5.%[
:这是一个格式说明符的变体,用于读取一个字符集合。它可以配合一组字符使用,并读取直到遇到不在该集合中的字符为止,包括空白字符。
char set[10];
scanf("%[abcd]", set); // 读取一个由 'a'、'b'、'c' 或 'd' 组成的字符串,直到遇到其他字符或输入结束
请注意,在使用 scanf
时应该非常小心,特别是当读取字符串时,以避免缓冲区溢出和未定义行为。在实际应用中,fgets
通常是一个更安全的选择,因为它允许你指定读取的最大字符数。