先简要介绍下scanf函数以及工作方法:
函数原型:int scanf ( const char * format, ... );
返回值:返回成功读取到的字符个数(至于什么时候读取失败,下面讨论)还有一种是遇到EOF; 工作方法:从左边开始处理字符串的信息,如果遇到转化说明,则该函数会从输入的数据中进行匹配并且必要时跳过空格;遇到不可能属于此项的字符时停止,若成功读入则会继续处理余下字符串的内容,否则函数会立即返回;
工作方法(详解): scanf函数在每次匹配转化说明时会忽略若干空格(不包括%c) 例子辅助理解:
scanf("%d%d", &x, &y); //此时你可以输入 3 4
//也可以换行输入\n 3\n 4 他依旧会成功读入x,y
scanf函数读入数据时会依次读入字符直到遇到不可能属于此数据的字符时,它会将此字符放回原处,以便下次读入时使用。 例子辅助理解
#include<stdio.h>
int main(void)
{ //结果:
int a = 0; //a = 2
int b = 0; //b = -40
float c = 0.0f; //c = 0.42
float d = 0.0f; //d = -3.0e4
scanf_s("%d%d%f%f", &a, &b, &c, &d); //输入 2-40.42-3.0e4\n
return 0;
}
当格式串中遇到普通字符时:
1.空白字符:格式串的空白字符可以匹配任意数量个输入中的空白字符(可能为0个),直到遇到非空白字符它才会介绍匹配,这会导致一个问题;
scanf("%d ", &x);//你输入一个数字后,交互式程序还在等待输入,你必须输入一个非空白字符他才会退出
2. 其他字符:格式符中的其他字符会匹配输入中的字符,若匹配成功则继续处理余下格式串,若匹配失败则会返回,异常退出。
scanf("%d/%d",&x,&y);//如果你输入2/3没问题,但是你输入2 /3它就会异常退出,因为空格和/不匹配、
利用上述工作原理可以实现数的
逆序打印:
int main(void)
{
int a, b, c;
scanf("%1d%1d%1d", &a, &b, &c);
printf("%d%d%d", c, b, a);
return 0;
}
分数的输入:
scanf("%d / %d",&x,&y);// /两边加上空格可以防止不少错误