scanf_s()
或scanf()
函数从标准输入读取数据,并根据格式控制字符串中的格式说明符将它们转换为一个或多个值。
scanf_s()
函数的原型如下:
int scanf_s(const char * restrict format, . . . );
scanf()
函数也有一个类似的原型。
scanf()
和scanf_s()
之间的区别是:
- 后者需要两个参数,每个输入数据由
c
,s
和[
说明符, - 前者只需要一个参数。
格式控制字符串基本上是scanf_s()
应如何将传入字符流转换为所需值的描述。
在格式控制字符串之后,可以拥有一个或多个可选参数。
对于使用规范c
,s
或[说明符]
读取的每个输入,第一个对应的参数是指向要存储输入的内存的指针,第二个参数对应于前一个参数指向的字节数。scanf_s()
从stdin读取,直到它到达格式控制字符串的末尾或者直到出现错误情况。
在控制台程序中需要输入时,将使用此函数。 这将接收行上的所有输入,直到按下回车键。 然后它会将值放入声明的变量中。它与scanf()
函数相同,但它是安全的。 下面是一个例子:
#include<stdio.h>
int main()
{
char c;
printf("Enter a letter");
scanf_s("%c", &c, 1);
printf("%s",&c);
return 0;
}
scanf()
在vs2013里报错,编译器提示要用scanf_s
代替;scanf_s()
参数与scanf()
不同;例如scanf("%s",&name,n)
,整型n
为name
类型的大小,如果name
是数组,那么n
就是该数组的大小。
#include<stdio.h>
#include<cstring>
struct Student
{
char name[10];
char sex[10];
int age;
char city[10];
char grade[10];
};
int main()
{
struct Student stu1;
printf("请输入姓名:");
scanf_s("%s", &stu1.name,10);
printf("请输入性别:");
scanf_s("%s", &stu1.sex,10);
printf("请输入年龄:");
scanf_s("%d", &stu1.age,4);
printf("请输入城市:");
scanf_s("%s", &stu1.city,10);
printf("请输入年级:");
scanf_s("%s", &stu1.grade,10);
printf("姓名:%s\n", stu1.name);
printf("性别:%s\n", stu1.sex);
printf("年龄:%d\n", stu1.age);
printf("城市:%s\n", stu1.city);
printf("年级:%s\n", stu1.grade);
return 0;
}