C语言使用scanf_s函数输入的正确姿势

            刚开始学习C语言,第一次写博客,有点小紧张,文章有不足之处欢迎指正。

一、 scanf_s函数格式控制字符串中除了格式声明之外,如果有其他字符,则在输入数据时要在对应位置上输入与这些字符相同的字符。
        例如以十进制格式输入1,2,3的语句scanf_s("%d,%d,%d",&a,&b,&c); 在输入数据时,应该输入1,2,3而不是1 2 3
       这里有的童鞋就要问了,为啥有时候可以输入1 2 3这样的格式呢?其实是这样的 :输入数值 ,两个数值之间要插入空格或其他分隔符(输入数值时如遇到空格,回车等或其他非法字符,认为该数值结束),以区分两个数值。 但是,如果出现上面第一种情况,就只能使用与格式控制字符串中字符相对应的字符。 以上面的例子来说,输入时不能使用1,2,3之外的任何格式
二、在输入连续的字符时,中间不能用任何字符,系统能够区分各个字符,有时候一个不小心就打入了空格或其他的字符,结果可想而知。但是,如果格式控制字符串中除了格式声明之外,如果有其他字符,则在输入数据时要在对应位置上输入与这些字符相同的字符。
        好了,第一次博客就写到这儿,不太会用这个编辑器,有啥建议的欢迎来带带小白。
        声明:一部分内容来自书本知识,不知道算不算原创,这里就定为翻译吧。

### C语言 `scanf_s` 函数使用方法 #### 函数原型 `scanf_s` 的函数原型定义为: ```c int scanf_s(const char *format, ...); ``` 此函数用于安全地从标准输入读取数据并存储到变量中[^1]。 #### 安全特性 为了提高安全性,`scanf_s` 要求对于某些类型的参数提供额外的大小信息。这有助于防止缓冲区溢出和其他潜在的安全风险。例如,在处理字符串时,除了目标数组外还需要指明其最大长度[^4]。 #### 参数说明 - `const char *format`: 格式控制字符串,指示如何解析输入的数据。 - 后续参数按照格式串中的转换说明依次给出对应的地址或值。 #### 返回值 成功返回已赋值项的数量;遇到文件结束符或读错误则提前终止,并返回实际赋值数目;如果没有任何字段被分配,则返回EOF[^2]。 #### 使用实例 下面展示了一个简单的例子来演示如何利用 `scanf_s` 来读入两个固定长度不超过7字符(加上结尾'\0'共8字节空间)的字符串: ```c #include <stdio.h> int main(void){ char buf1[8], buf2[8]; printf("Enter two words separated by space:\n"); // 每次读取前先清空缓存区 fflush(stdin); // 正确的方式:指定每一块缓冲区的最大尺寸减一作为宽度限定符, // 并传递该整数常量紧跟在相应的指向接收位置之后 if (scanf_s("%7s %7s", &buf1, sizeof(buf1)-1, &buf2, sizeof(buf2)-1) != 2) { fprintf(stderr,"Input error\n"); return -1; } printf("You entered: \"%s\" and \"%s\"\n", buf1,buf2); } ``` 上述程序展示了当需要一次性读取多个项目时应怎样调用 `scanf_s` 。注意这里不仅限于字符串类型,其他基本数值型也可以采用相似方式操作。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值