今天做题的时候发现,新版的vs和C语言的scanf要求格式在有些地方不一样,在这里记录下来
scanf()函数格式
定义结构体如下:
struct student
{
char s[21];
char c1, c2;
int m, n;
};
正常的scanf()函数格式是这样的:
scanf("%s %c %c %d %d", a[i].s, 21, &a[i].c1, 1, &a[i].c2, 1, &a[i].m, &a[i].n);
scanf_s()函数格式
scanf_s()函数的格式如下:
#include<stdio.h>
struct student
{
char s[21];
char c1, c2;
int m, n;
};
int main()
{
int i;
student a[3];
char s[33];
for (i = 0; i <= 2; i++)
{
scanf_s("%s %c %c %d %d", a[i].s, 21, &a[i].c1, 1, &a[i].c2, 1, &a[i].m, &a[i].n);
}
for (i = 0; i <= 2; i++)
{
printf("%s %c %c %d %d\n", a[i].s, a[i].c1, a[i].c2, a[i].m, a[i].n);
}
return 0;
}
输入:
YaoLin Y N 87 82
ChenRuiYi N Y 88 78
LiXin N N 92 88
结果:
YaoLin Y N 87 82
ChenRuiYi N Y 88 78
LiXin N N 92 88
由于vs编译器为防止输入时有溢出的危险,故需要在输出参数表列的每一项后面加上输入的长度(数字可加可不加)。并将原来的scanf()函数重新定义了一下,加上_s意思是更加安全。。。