scanf, fscanf, sscanf
vscanf, vsscanf, vfscanf
函数原型
#include <stdio.h>
int scanf(const char *format, ...);
int fscanf(FILE *stream, const char *format, ...);
int sscanf(const char *str, const char *format, ...);
#include <stdarg.h>
int vscanf(const char *format, va_list ap);
int vsscanf(const char *str, const char *format, va_list ap);
int vfscanf(FILE *stream, const char *format, va_list ap);
1.scanf
从标准输入读入字符。如果是字符串的话,遇到空格会停止
int a = 0;
scanf("%d",&a);
printf("a = %d", a);
再比如
int a = 0;
scanf("11%d",&a);
printf("a = %d", a);
必须要开头就直接输入11才能保证11后面的内容被读到。输入1122,a = 22
2.sscanf
从字符串中读入字符,可以用作将日期分解转换为int
#include <stdio.h>
int main()
{
char temp[256];
int year = 0;
int month = 0;
int day = 0;
int hour = 0;
int min = 0;
int sec = 0;
int flag = 0;
int zoneh = 0;
int zonem = 0;
char buf[256] = "2017-11-02T17:06:31+08:00";
sscanf(buf, "%4d-%2d-%2dT%2d:%2d:%2d",&year,&month,&day,&hour,&min,&sec);
printf("year = %d\n",year);
printf("month = %d\n",month);
printf("day = %d\n",day);
printf("hour = %d\n",hour);
printf("min = %d\n",min);
printf("sec = %d\n",sec);
//year = 2017
//month = 11
//day = 2
//hour = 17
//min = 6
//sec = 31
return 0;
}
3.fscanf
从文件中读入字符
FILE* fp;
char buf[256];
fp = fopen("test.txt","r");
fscanf(fp,"%s",buf);
printf("buf = %s", buf);
4.vscanf
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
void my_vscanf(char *format, ...)
{
char buf[256];
snprintf(buf, sizeof(buf), "input:%s", format);
va_list args;
va_start(args, format);
vscanf(buf, args);
va_end(args);
}
int main()
{
char a[256] = {0};
my_vscanf("%s",&a);
printf("a = %s\n",a);
return 0;
}
vsscanf, vfscanf同理
scanf还有和正则表达式相似的功能,可以参考