浅浅尝试下全新的领域(
1.scanf用法
1.1成绩free
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int score = 10;
printf("请输入成绩:");
scanf("%d", &score);//%后不加 \n
printf("成绩是:%d\n", score);
return 0;
}
第一行是防vs_2022报错的,学是从B站比特学的
1.2xyzw一次性全打进
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int x = 0;
int y = 0;
float z = 0.0;//少 . 会报错
float w = 0.0;
printf("输入4个数,前2整,后2浮点\n");
scanf("%d%d%f%f", &x, &y, &z, &w);
printf("%d %d %f %e\n", x, y, z, w);
//printf输出 %d%d%f%e之间有空格
//%e科学计数法,-3e9是-3乘10的9次方
return 0;
}
1.3scanf原理
1>scanf处理占位符时,会自动过滤空白字符(空格,换行符等)
处理用户原理:用户的输入放入缓存,按下回车键后,按占位符对缓存进行解读。
解读用户输入时,从上一次解读遗留的第一个字符开始,直到读完缓存,
或者遇到第一个不符合条件的字符为止
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int x;
float y;
printf("尝试输入 -13.45e12# 0,看看输出的是什么吧\n");
int r = scanf("%d%f", &x,&y);
//读第一个占位符(整型)scanf跳过了空格,从“-”开始,读到“.”结束
//读第二个占位符(整型)从“.”开始,读到“#”结束
printf("%d %e\n", x,y);
//最后输出为-13 4.500000e+11
// //0.45*10‸12 = 4.5*10‸11
printf("scanf返回值是%d", r);
//scanf读取了2个变量(x,y),返回值是2
//在输入时按一次Ctrl+Z来跳过一个占位符(输出1),按2次输出-1
return 0;
}
2>scanf的返回值是一个整数,表示成功读取变量的个数
如果没有读取任何项,或者匹配失败,则返回0
如果读取到文件结尾,则返回常量EOF(-1)
2.占位符
%d整数 %s字符串 %c字符
%f float类型浮点数 %lf double类型浮点数 %Lf long double类型浮点数
%[] 在[]中指定一组匹配的字符(如%[0-9]),遇到不在集合中的字符时,匹配停止
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
char name[11];//数组本身就是地址
scanf(" %10s",name);//%[]s限定scanf输入字符串最长长度
printf("%s\n", name);
return 0;
}
以上占位符除%c都会自动忽略起首的空白字符
空格%c 强制跳过字符前空白字符 如scanf(" %c,&ch")
3.赋值忽略符
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int year = 0;
int month = 0;
int day = 0;
//1999-9-9
scanf("%d%*c%d%*c%d%", &year, &month, &day);
//赋值忽略符号* 把*加在任何占位符的%后,该占位符就不会返回值,解析后将被丢弃
printf("%d %d %d\n", year, month, day);
return 0;
}