c语言中scanf的基本用法、返回值、占位符、赋值忽略符
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//scanf输入函数使用,其返回值为整数int scanf;读取失败则返回值为0
//int main()
//{
// char score = 0;
// printf("输入成绩为:");
// scanf("%d", & score );//&为取地址操作符
// printf("成绩:%d\n",score);
// return 0;
//}
//int main()
//{
// int a = 0;
// int b = 0;
// float x = 0;
// float y = 0;
// //printf("输入成绩为:");
// scanf("%d%d%f%f", &a,&b,&x,&y);//&为取地址操作符
// printf("%d\n", a);//输入1,输出1
// printf("%d\n", b);//输入-4,输出-4
// printf("%f\n", x);//输入3.14,输出3.140000
// printf("%f\n", y);//输入-4.0e3(-4*10^3),输出-4000.000000
// return 0;
//}
//scanf返回值
//int main()
//{
// int x = 0;
// float y = 0;
// scanf("%d%f", &x, &y);//输入: -13.45e12# 0
// printf("%d\n", x);//输出:-13
// printf("%f\n", y);//输出:45999988800(相当于接上之前没有读到的继续读,也就是0.45*10^12,由于scanf函数有误差则不是450000000)
// return 0;
//
//}
//scanf函数返回值,读取到数值显示(按ctrl+z会让函数读取失败,导致r=-1)
//int main()
//{
// int x = 0;
// int a = 0;
// float y = 0;
// int r = scanf("%d%d%f", &x, &a,&y);//输入: 100 200 3.14 ;100 200 d
// printf("x=%d a=%d y=%f\n", x,a,y);//输出:一样的;100 200 0.000000
// printf("r=%d\n", r);//输出:r=3;r=2
// return 0;
//
//}
//升级优化
//int main()
//{
// int x = 0;
// int a = 0;
// float y = 0;
// int r = scanf("%d%d%f", &x, &a, &y);//输入: 100 200 d
// if(r==3)
// printf("x=%d a=%d y=%f\n", x, a, y);
// else
// {
// printf("x=%d a=%d y=%f\n", x, a, y); //输出:100 200 0.000000
// printf("读取到的数据可能存在问题\n");//输出
// }
// printf("r=%d\n", r);//输出:r=2
// return 0;
//}
//占位符在scanf函数中使用与printf函数中一致(%c\%d\%f\%lf%Lf%s)
//除了%c以外都会省略起首的空白字符
//int main()
//{
// int a = 0;
// scanf("%d",&a);//输入: 3
//
// printf("%d\n",a);//输出:3
// return 0;
//}
//%c空格问题(%s会直接跳过空格)
//int main()
//{
// char a = 0;
// scanf("%c", &a);//输入: x(这里下面有绿色横线,代表忽略了scanf函数的返回值;前面加上int就可以显示出返回值)
// scanf(" %c", &a);//输入: x(由于在%c前面加上一个空格就可以跳过前面空格输出字符)
//
// printf("%c----\n", a);//输出: ----(相当于把空格当作一个字符输出了);输出:x----
// return 0;
//}
//%s数组使用(只能读取一个单词,读取完字符后识别到空格就不会继续读取)
//int main()
//{
// char a[20];
// scanf("%s", a);//这里a前面没有加&符号,是因为a为数组,数组本身就是地址
//
// printf("%s\n", a);
// return 0;
//}
//%s多个字符读取问题
//int main()
//{
// char a1[20];
// char a2[20];
// scanf("%s %s", a1,a2);//这里a前面没有加&符号,是因为a为数组,数组本身就是地址
// printf("%s\n", a1);
// printf("%s\n", a2);
// return 0;
//}
//优化一下
//int main()
//{
// char a1[10];
// //scanf("%9s", a1);//由于%s在读取的是根本不会在意输入多少个字符,输入字符超过数组则会报错不能运行,
// //于是在s前面写上9,留一个是为了给读取结束后返回值\0;
// scanf("%[^\n]s", a1);//在[]里面的意思是读取到\才停止
// printf("%s\n", a1);
// return 0;
//}
//特殊情况赋值
//int main()
//{
// int a=0;
// int b=0;
// int c=0;
// scanf("%d-%d-%d", &a,&b,&c);//输入:2026-5-22(必须按照这样的格式输入才可以)
// printf("%d %d %d", a,b,c);
// return 0;
//}
//赋值忽略符
int main()
{
int a = 0;
int b = 0;
int c = 0;
scanf("%d%*c%d%*c%d", &a, &b, &c);//输入:2026-5-22(%*c为赋值忽略符把中间的字符忽略掉)
printf("%d %d %d", a, b, c);//输出:2026 5 22
return 0;
}
