
笔记里面有一些代码的首字母是大写的,自己写时候要用小写,这是OneNote编写时软件的问题。此笔记仅是我个人学习的笔记,接下来会持续更新,希望对初学者有所帮助,如果发现错误,望在评论区指正。
printf()和scanf()
printf
基本用法
形式:printf()
意义:print就是打印的意思,f为format,格式化的意思,表示可以按格式输出文本
注意:printf()本身打印完成后并不自动换行,若想换行,可在其后加换行符(\n),文本内部也是如此。
printf()是前文中提到的标准库中的头文件stdio.h定义的,所以使用以前需要在源码文件头部引入 #include <stdio.h> 这个头文件
占位符
形式:%[字母]
例如:%d
意义:就是这个位置可以用其它值代入
注意:输出文本里可以有多个占位符,且有一一对应关系
使用:
#include <stdio.h>
int main()
{
printf("%s says it is %d o'clock\n", "lisi", 21);
return 0;
}
//lisi says it is 21 o'clock
常用占位符举例
%c:字符
%d:十进制整数
%f:小数(包含float和double)//float - %f double - %lf
%hd:十进制short int
%hu:unsigned short int
%ld:十进制long int
%lu:unsigned long int
%Lf:long doubule 浮点数
%p:指针(用来打印地址)
%s:字符串
%u:无符号整数(unsigned int)
%x:十六进制整数
%zd:size_t 类型
输出格式
printf()可以定制占位符的输出格式(如上)
限定宽度
printf()可以限定占位符的最小宽度
意义:不足n位的用空格补足五位,超过n位的正常输出。
默认是右对齐,如果要调整为左对齐,在%后加-
使用:
- 右对齐
#include <stdio.h>
int main()
{
printf("%5d\n", 123); // 输出为 " 123"
return 0;
}
- 左对齐
#include <stdio.h>
int main()
{
printf("%-5d\n", 123); // 输出为 " 123 "
return 0;
}
- 超出n位正常输出
#include <stdio.h>
int main()
{
printf("%5d\n", 123456); // 输出为 " 123456"
return 0;
}
总是显示正负号
形式:%+[字母]
意义:通常情况下,输出结果只显示 - 而不显示 + ,当需要正号也显示的时候,我们在%后加+,如上形式
使用:
#include <stdio.h>
int main()
{
printf("%+d\n", 12); // 输出 +12
printf("%+d\n", -12); // 输出 -12
return 0;
}
限定小数位数
形式:%.n[字母]
意义:输出小数时,我们有时候想要保留n位小数或者调整小数的0的个数,这个时候就需要限定小数位数
使用:
// 输出 Number is 0.50
#include <stdio.h>
int main()
{
printf("Number is %.2f\n", 0.5);
return 0;
}
当限定宽度和限定小数位数同时使用时:
形式:%n.x[字母]
使用:
// 输出为 " 0.50"
#include <stdio.h>
int main()
{
printf("%6.2f\n", 0.5);
return 0;
}
注意:
最⼩宽度和⼩数位数这两个限定值,都可以⽤ * 代替,通过 printf() 的参数传⼊。
使用:
#include <stdio.h>
int main()
{
printf("%*.*f\n", 6, 2, 0.5);
return 0;
}
// 等同于printf("%6.2f\n", 0.5);
输出部分字符串
形式:%.n[字母]
意义:与限定小数位数形式类似,代表字符串的前n位正常输出,n位以后舍去
使用:
// 输出 hello
#include <stdio.h>
int main()
{
printf("%.5s\n", "hello world");
return 0;
}
scanf
基本用法
形式:scanf(“%[字母]”,&[上面定义的变量])
注意:后面的&[变量],&是取地址操作符,当后面的变量是指针变量(如字符串变量)时,不需要加&。
scanf()后面可以加n个变量。依次输入前方占位符(占位符个数和变量个数相同)
意义:与printf类似,scan是扫描的意思,f是格式化,表示按格式输入文本,什么叫扫描,其实就是插入一个“读取”键盘输入的功能
scanf()也是前文中提到的标准库中的头文件stdio.h定义的,所以使用以前需要在源码文件头部引入 #include <stdio.h> 这个头文件
例:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int score = 0;
printf("请输入成绩:");
scanf("%d", &score);
//scanf()函数占位符后面的参数需要的是地址
//&是取地址操作符,&score是取出地址的意思
printf("成绩是:%d\n", score);
return 0;
}
运行结果

scanf的返回值
解释:scanf()的返回值是成功读取的变量个数;如果没有读取到变量,则返回0;如果在成功读取任何数据之前,发⽣了读取错误或者遇到读取到⽂件结尾,则返回常量 EOF (-1)。(EOF - end of file ⽂件结束标志
注意:vs里按3次ctrl+z,能提前结束输入
占位符
scanf()常用的占位符如下,与printf()基本一致,并且除%c以外都会自动忽略起始的空白字符。
这里着重提到以下几个:
%[]:在⽅括号中指定⼀组匹配的字符(⽐如 %[0-9] ),遇到不在集合之中的字符,匹配将会停⽌。
%c:字符,但不会忽略起始空白字符,总是返回第一个字符,无论是否为空格;如果要让%c忽略起始空白字符,要写为“ %c”(在%前加一个空格)。
%s:从第一个非空白字符开始读起,直到遇到空白字符(即空格、换⾏符、制表符等)为止,并且会在字符串变量末尾存储⼀个空字符 \0。
注意:scanf()将字符串读入数组时,不会检测字符串是否超过数组长度。当超过时会报错;此时若要限制读取字符串长度,要写为"%[m]s",m为一个整数,表示读取字符串的最大长度,后面的字符将被丢弃。
例子:
#include <stdio.h>
int main()
{
char name[11];
scanf("%10s", name);
return 0;
}
赋值忽略符
解释:有时用户键盘输入不符合预定的格式,此时解析数据会失败。为了避免这一情况,scanf()提供了一个赋值忽略符,只要把*加在任意占位符的百分号后面,该占位符就不会返回值,解析后被丢弃。
例子:
int main()
{
int year;
int month;
int day;
scanf("%d%*c%d%*c%d", &year, &month, &day);
printf("%d %d %d\n",year,month,day);
return 0;
}
*此例子中使用%c来“消除”符号的差异。

被折叠的 条评论
为什么被折叠?



