printf
#include <stdio.h>
int main(void)
{
printf("Hello World");
return 0;
}
占位符
printf("I am %d years old\n", 18);
注意:printf() 参数与占位符是⼀⼀对应关系,有 n 个占位符,printf() 的参数就应该有 n + 1 个。如果参数个数少于对应的占位符, printf() 可能会输出内存中的任意值。
- %d:用于输出带符号的十进制整数。
- %i:与%d相同,用于输出带符号的十进制整数。
- %u:用于输出无符号的十进制整数。
- %o:用于输出无符号的八进制整数。
- %x:用于输出无符号的十六进制整数(使用小写字母)。
- %X:用于输出无符号的十六进制整数(使用大写字母)。
- %f:用于输出浮点数。
- %e:用于以科学计数法输出浮点数(小写字母e表示指数)。
- %E:用于以科学计数法输出浮点数(大写字母E表示指数)。
- %g:根据值的大小选择%f或%e格式来输出浮点数。
- %G:根据值的大小选择%f或%E格式来输出浮点数。
- %c:用于输出单个字符。
- %s:用于输出字符串。
- %p:用于输出指针的地址。
- %%:用于输出百分号本身。
-
%zd : size_t 类型。
输出格式
限制宽度
printf("%5d\n", 123); // 输出为 " 123"
printf("%-5d\n", 123); // 输出为 "123 "
printf("%12f\n", 123.45);// 输出 " 123.450000"
总是显示正负号
printf("%+d\n", 12); // 输出 +12
printf("%+d\n", -12); // 输出 -12
限定小数位数
printf("Number is %.2f\n", 0.5);// 输出 Number is 0.50
同理如果希望小数点后⾯输出3位( 0.500 ),占位符就要写成 %.3f
printf("%6.2f\n", 0.5);// 输出为 " 0.50"
printf("%*.*f\n", 6, 2, 0.5);
scanf
#define _CRT_SECURE_NO_WARNINGS 1
只有安装了VS,你的安装路径下就会有一个newc++flie.cpp这个文件,找到这个文件拷贝到桌面,用记事本打开后把这行代码直接加到他的第一行,然后再放回原先的文件夹替换掉原来的文件,以后创建新的.c或.cpp文件就会自动在第一行添加上这行代码,就不需要每次都手动添加。
scanf("%d", &i);
scanf("%d%d%f%f", &i, &j, &x, &y);
返回值
读取字符串
当使用%s占位符来获取数据时是从当前第一个非空白的字符读起知道遇到空白字符,包括空格、制表符、换行符为止。因此%s不能一次读取多个英文单词,也就意味着scanf()不适合读取包含空格的字符串。
当用scanf()读取字符数组时不会检测是否超出数组长度,所以很可能在存储字符串时超出数组边界,因此在用%s占位符时,要指定读入字符串的最大长度,即写成 %[m]s ,其中的 [m] 是⼀个整数,表示读取字符串的最大长度,后面的字符将被丢弃。
示例如下
#include <stdio.h>
int main()
{
char name[11];
scanf("%10s", name);
return 0;
}
赋值忽略符
只要把 * 加在任何占位符的百分号后面,该占位符就不会返回值,解析后将被丢弃。
scanf("%d%*c%d%*c%d", &year, &month, &day);
这样子无论输入2023-7-23还是2023/7/23都能获取到正确的年、月、日了。
getchar
输入缓冲区
当你使用scanf函数读取输入时,输入缓冲区会接收所有键盘输入,包括换行符和空格符。
如果scanf在读取数字或字符串时停止(例如遇到空格或换行符),输入缓冲区中仍然会留下未读取的字符,包括这些空白符。
为什么需要getchar()
在使用scanf读取字符串后,通常需要使用getchar()来读取输入缓冲区中的剩余字符,特别是换行符\n。
如果不清除输入缓冲区中的换行符,在下一次输入操作中可能会出现意外的行为,因为换行符会被下一个输入操作误读。
示例如下
#include <stdio.h>
int main() {
char str[100];
// 读取一行字符串,直到换行符为止
scanf("%[^\n]", str);
// 清除输入缓冲区中的换行符
getchar();
// 再次读取一个字符,此时会读取掉上一行输入的换行符
char ch = getchar();
printf("Input String: %s\n", str);
printf("Next character: %c\n", ch);
return 0;
}