一:
#include <stdio.h>
int main()
{
char arr[20] = {0};
scanf("%6s", arr);
printf("%s", arr);
return 0;
}
分析:scanf函数不会忽略空格。如输入abc__def 则读取__时停止输出为abc
[20]指的是最大读取长度多的话就会系统就会崩溃
%6s指的是读取长度为6超出部分不读
二:
#include <stdio.h>
int main()
{
printf("%5d\n", 123);
printf("%f\n", 1.23);
printf("%+5d\n", 123);
printf("%-5d\n", 123);
printf("%.3f\n",12.6);
printf("%6.3f",5.9);
printf("%*.*f\n",9,6,3.6);
printf("%s","what doesn`t kill you makes you stronger");
return 0;
输出结果为(注:x指输出空格)
xx123
1.230000
x +123
123
12.600
x5.900
3.600000
what doesn`t kill you makes you stronger
分析:%5d指的是输出五位数字由于123不足五位123前输出两个空格补位,123自动右对齐。
%-5d实现左对齐
%.3f实现小数点后保留三位
%6.3f指的是读取6位,小数点后保留3位
%s为输出字符串
三:
int score = 0;
printf("请输入成绩:");
scanf("%d", &score);
printf("您的成绩是:%d", score);
易错点:&容易漏
四:
#include <stdio.h>
int main()
{
int year = 0;
int month = 0;
int day = 0;
scanf("%d-%d-%d", &year, &month, &day);
printf("%d %d %d", year,month,day);
return 0; }
输入:2023-7-23
输出:2023 7 23
但
上⾯⽰例中,如果⽤⼾输⼊ 2020-01-01 ,就会正确解读出年、⽉、⽇。问题是⽤⼾可能输⼊其他 格式,⽐如 2020/01/01 ,这种情况下, scanf() 解析数据就会失败。
为了避免这种情况, scanf() 提供了⼀个赋值忽略符(assignment suppression character) 。 只要把 * 加在任何占位符的百分号后⾯,该占位符就不会返回值,解析后将被丢弃。
即:
#include <stdio.h>
int main()
{
int year = 0;
int month = 0;
int day = 0;
scanf("%d%*c%d%*c%d", &year, &month, &day);
printf("%d %d %d", year,month,day);
return 0;
}
输入:2023-7-23或2023/7/23
输出:2023 7 23
即加上%*c后自动忽略用户所输入的符号