scanf 和 scanf_s 函数在VS中的用法解释

scanf 函数在VS中的用法解释

  1. scanf函数和scanf_s函数
    由于微软工作人员从函数安全性的考虑,在VS中弃用了scanf函数,之后创建了scanf_s函数来代替使用,所以在VS中,大多数时候我们还是使用scanf_s函数
    其实不是说不可以使用scanf函数,只不过是预处理器会发出错误警告并停止编译,如果想要坚持使用scanf函数的话,可以在头文件定义
#define _CRT_SECURE_NO_WARNINGS
或者在C\C++预处理器中加入语句_CRT_SECURE_NO_WARNINGS
  1. 一些关于scanf的说明
    如果要读入一个整型数据,有
scanf("%d",&a);

如果要读入多个整型,有

scanf("%d%d",&m,&n);
scanf("%d %d",&m,&n);//输入时两个数之间必须用空格或换行隔开从而分别读入
scanf("%d" "%d",&m,&n);//以上三种表示等价,scanf读取整型处理时会忽略空格
scanf("%d,%d",&m,&n);//输入格式必须为 m,n 如 12,12 逗号可以换成其他符号如反斜杠等
scanf("%d","%d",&m,&n);//此输入格式会报错,不要使用

如果要读入一个字符,有

scanf("%c",&m)`;//scanf函数会将读入的字符转化成assci码

如果要读入多个字符

scanf("%c%c",%m,%n);//输入格式必须为mn
scanf("%c %c",&m,&n);//输入格式必须为m n
scanf("%c""%c",&m,%n);
scanf("%c" "%c",&m,&n);//上面两种格式等价,注意如果输入a b,只会读入a和空格,忽略b
scanf("%c,%c",&m,&n);//输入格式必须为m,n
scanf("%c","%c",&m,&n);//此输入格式会报错,不要使用

如果要读入一个字符串

scanf("%s",array);

如果要读入多个字符串

scanf("%s %s",array1,array2);

同时scanf支持多种不同格式的读入同时进行

scanf("%d/%s/%d",&month,name,&year);//当然也可以没有反斜杠

也可以在scanf中加入一些限制条件使得读入特定格式数据
如[、]、
此处不赘述
scanf有返回值,返回值是成功读入的参数的个数

  1. 有关scanf_s的说明

读入整形的方式与上面scanf相同

如果要读入一个字符

scanf_s("%c",&m)//相当于一次getchar

如果要读入多个字符

scanf_s("%c%c",%m,%n);
scanf_s("%c %c",&m,&n);
scanf_s("%c""%c",&m,%n);
scanf_s("%c" "%c",&m,&n);
scanf_s("%c,%c",&m,&n);
scanf_s("%c","%c",&m,&n);

上面的办法都无法读入
有可能是我的办法不对,改日再说
此处贴一个链接

官方关于scanf_s的说明

如果要读入一个字符串
scanf_s为了防止越界,必须输入需要获取的字符串的长度

scanf_s("%s",array,length);

scanf_s也支持不同类型的数据的输入,不过我现在也不是特别清楚,日后搞明白再写
事实证明,这些函数格式输入错误会导致各种各样的错误,必须提前明白如何输入及其格式究竟是怎样的

  • 27
    点赞
  • 148
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
scanfscanf_s都是C语言用于输入的函数,用来从标准输入流读取数据。二者的使用方式和参数都有所不同。 scanf函数是C语言标准库提供的函数,使用较为简单,通常用于读取基本数据类型(如整型、浮点型、字符型等)。它的函数原型为: int scanf(const char *format, ...); 其,format参数是一个格式字符串,用来指定输入的数据类型和格式,其他参数是读取到的数据的地址。scanf函数会根据format字符串的格式要求,将输入的内容转换为对应的数据类型,并存储到指定的地址。 而scanf_s函数是安全版本的scanf函数,它在读取字符串时会进行安全性检查,以防止缓冲区溢出的问题。scanf_s函数原型为: int scanf_s(const char *format, ...); scanf_s函数的使用方式与scanf函数基本相同,但是在读取字符串时需要指定缓冲区的大小。 具体来说,scanf_s函数需要在读取字符串时指定缓冲区的大小,以避免发生缓冲区溢出的问题。因此,scanf_s函数的格式字符串需要包含一个指定缓冲区大小的修饰符“%s”之前添加一个整数参数。例如,使用scanf_s函数读取一个字符串的代码可以如下所示: char arr[10]; scanf_s("%9s", arr, sizeof(arr)); 上述代码,"%9s"表示读取一个最多包含9个字符的字符串,并将其存储到arr数组。由于arr数组的大小为10,因此可以确保读取的字符串不会导致数组溢出。 综上所述,scanfscanf_s都是用于输入的函数,其scanf_sscanf的安全版本,用于防止缓冲区溢出的问题。scanf函数在各种编译器上都能够通用,而scanf_s函数在一些编译器上可能不支持。因此,在编写代码时需要根据具体情况选择适合的函数来进行输入操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值