Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >用于用户输入|的内置库函数scanf, fscanf, sscanf, scanf_s, fscanf_s, sscanf_s

用于用户输入|的内置库函数scanf, fscanf, sscanf, scanf_s, fscanf_s, sscanf_s

作者头像
鲸落c
发布于 2022-12-18 09:39:19
发布于 2022-12-18 09:39:19
1.7K00
代码可运行
举报
文章被收录于专栏:鲸落学习笔记鲸落学习笔记
运行总次数:0
代码可运行

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第8天,点击查看活动详情

scanf() : C 库函数 int scanf (const char *format, ...) 从 stdin 读取格式化的输入。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Syntax:
int scanf(const char *format, ...)

Return type: Integer

Parameters:
format: 包含类型说明符的字符串
"..." (ellipsis): 指示函数接受可变数量的参数

每个参数必须是写入转换结果的内存地址。成功后,该函数返回填充的变量数。如果输入失败,在成功读取任何数据之前,将返回 EOF。 可在 scanf 中使用的类型说明符:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%c — Character
%d — Signed integer
%f — Floating point
%s — String
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//C 程序演示scanf语句
#include <stdio.h>
#include <stdlib.h>

int main()
{
    char a[10];
    printf("Please enter your name : \n");
    
    //scanf语句
    scanf("%s", a);

    printf("You entered: \n%s", a);

return 0;
}

输入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
haiyong

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Please enter your name : 
You entered: 
haiyong

sscanf( ):sscanf( ) 用于从字符串中读取格式化的输入。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Syntax:
int sscanf ( const char * s, const char * format, ...);

Return type: Integer

Parameters:
s: 用于检索数据的字符串
format: 包含类型说明符的字符串
 : 参数包含用于分配具有适当类型的存储的指针。

这些参数的数量应至少与格式说明符存储的值的数量相同。

成功后,该函数返回填充的变量数。在输入失败的情况下,在成功读取任何数据之前,将返回 EOF。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 说明sscanf语句的C程序
#include <stdio.h>

int main ()
{
    // 声明数组 s
    char s [] = "3 red balls 2 blue balls";
    char str [10],str2 [10];
    int i;
    
    // %*s用于跳过单词
    sscanf (s,"%d %*s %*s %*s %s %s", &amp;i, str, str2);
    
    printf ("%d %s %s \n", i, str, str2);
    
    return 0;
}

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
3 blue balls

fscanf( ):fscanf( ) 从文件中读取格式化数据并将其存储到变量中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Syntax:
int fscanf(FILE *stream, const char *format, ...)

Parameters:
Stream: 指向标识流的File对象的指针。
format: 是包含类型说明符的字符串

成功后,该函数返回填充的变量数。在输入失败的情况下,在成功读取任何数据之前,将返回 EOF。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 说明sscanf语句的C程序
//此程序将在文件file.txt的系统上运行

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char s1[10], s2[10], s3[10];
    int year;
    
    // 文件指针
    FILE * fp;
    
    // 打开/创建文件
    fp = fopen ("file.txt", "w+");	
    
    // 在文件中存储字符串
    fputs("Hello World its 2017", fp);
    
    // 将文件位置设置为文件的开头
    rewind(fp);
    
    // 从文件中获取输入
    fscanf(fp, "%s %s %s %d", s1, s2, s3, &amp;year);
    
    printf("String1 |%s|\n", s1 );
    printf("String2 |%s|\n", s2 );
    printf("String3 |%s|\n", s3 );
    printf("Integer |%d|\n", year );
    
    // 关闭文件指针
    fclose(fp);	
    
    return(0);
}

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
String1 |Hello|
String2 |World|
String3 |its|
Integer |2017|

scanf_s() : 此函数特定于微软编译器。它与 scanf 相同,只是不会导致缓冲区过载。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Syntax:
int scanf_s(const char *format [argument]...);

argument(parameter): 在这里,您可以指定缓冲区大小并实际控制输入应用程序的限制。

成功后,该函数返回填充的变量数。在输入失败的情况下,在成功读取任何数据之前,将返回 EOF。 为什么要使用 scanf_s()? scanf 只读取控制台提供的任何输入。C 不检查用户输入是否适合您指定的变量。 如果你有一个名为 color[3] 的数组,并且你使用 scanf 表示 “Red”,它会正常工作,但如果用户输入超过 3 个字符,scanf 开始写入不属于 color 的内存。C 不会捕获或警告您,它可能会也可能不会使程序崩溃,具体取决于是否有内容试图访问并写入不属于颜色的内存插槽。这就是scanf_s发挥作用的地方。scanf_s检查用户输入是否适合给定的内存空间。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 说明sscanf_s语句的C程序

//scanf_s()只能在Microsoft Visual Studio中工作。
#include <stdio.h>
#include <stdlib.h>

int main()
{
    char a[5];
    
    // sizeof(a)是缓冲区大小
    scanf_s("%s", a, sizeof(a));
    
        printf("\n%s ", a);

    return 0;
}

输入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Red

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Red

输入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Yellow

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
No Output

说明缓冲区大小和数组大小之间的关系。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// C程序使用输入后按下的Enter键(换行符)
#include<stdio.h>

char ch[100000];
printf("Enter characters: ");
scanf_s("%s", ch, 99999);
getchar();
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// C++程序使用输入后按下的Enter键(换行符)

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
    // 实例
    char ch[100000];
    printf("Enter characters: ");
    scanf_s("%s", ch, 99999);
    getchar();
    return 0;
}

如果缓冲区大小等于或小于数组的大小,则输入大于或等于缓冲区大小将不执行任何操作。

如果缓冲区大小大于数组的大小,则

a. 输入小于缓冲区大小将起作用,但会给出错误

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
“运行时检查失败 #2 – 变量'variable_name'周围的堆栈已损坏。”

b. 输入大于缓冲区大小将无助于任何操作并给出相同的错误。

fscanf_s() : fscanf() 和 fscanf_s() 之间的区别与 scanf() 和 scanf_s() 的区别相同。fscanf_s() 是安全函数,安全函数要求每个 c、C、s、S 和 [ type 字段的大小作为紧跟变量后面的参数传递。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Syntax:
int fscanf_s(   FILE *stream,  const char *format ,[argument ]... ); 

fscanf_s has an extra argument(parameter) where you can 
specify the buffer size and actually control the limit of the input.

成功后,该函数返回填充的变量数。在输入失败的情况下,在成功读取任何数据之前,将返回 EOF。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 说明fscanf_s语句的C程序此程序将在MS Visual studio上运行
#include <stdio.h>
#include <stdlib.h>

int main()
{
    char s1[10], s2[10], s3[10];
    int year;
    
    // 文件指针
    FILE * fp;

    // 安全打开文件
    fopen_s(&amp;fp,"file.txt", "w+");
    
    fputs("Hello World its 2017", fp);

    rewind(fp);

    // 使用 fscanf_s
    fscanf_s(fp, "%s", s1, sizeof(s1));
    fscanf_s(fp, "%s", s2, sizeof(s2));
    fscanf_s(fp, "%s", s3, sizeof(s3));
    fscanf_s(fp, "%d", &amp;year, sizeof(year));

    printf("String1 |%s|\n", s1);
    printf("String2 |%s|\n", s2);
    printf("String3 |%s|\n", s3);
    printf("Integer |%d|\n", year);

    fclose(fp);

    return(0);
}

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
String1 |Hello|
String2 |World|
String3 |its|
Integer |2017|

sscanf_s() : sscanf_s() 是 sscanf() 的安全函数,安全函数要求每个 c、C、s、S 和 [ 类型字段的大小作为紧跟在变量后面的参数传递。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Syntax:
int sscanf_s(const char *restrict buffer, const char *restrict format, ...);

sscanfs有一个额外的参数(参数),您可以在其中指定缓冲区大小并实际控制输入的限制。

成功后,该函数返回填充的变量数。在输入失败的情况下,在成功读取任何数据之前,将返回 EOF。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//说明sscanf_s语句的C程序
//此程序将在MS Visual studio上运行
#include <stdio.h>

int main()
{
    char s[] = "3 red balls 2 blue balls";
    char str[10], str2[10];
    int i;

    // %*s用于跳过单词
    sscanf_s(s, "%d", &amp;i, sizeof(i));
    sscanf_s(s, "%*d %*s %*s %*s %s", str, sizeof(str));
    sscanf_s(s, "%*d %*s %*s %*s %*s %s", str2, sizeof(str2));
    
    printf("%d %s %s \n", i, str, str2);

    return 0;
}

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
3 blue balls 

注意: sscanf_s() 仅适用于 Microsoft Visual Studio

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-12-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
sscanf,sscanf_s及其相关使用方法「建议收藏」
定义函数 int sscanf (const char *str,const char * format,……..);
全栈程序员站长
2022/07/06
5.8K0
sscanf函数-----字符串拆分函数
sscanf的作用:从一个字符串中读进于指定格式相符的数据。利用它可以从字符串中取出整数、浮点数和字符串。 sscanf和scanf的区别:scanf是以键盘作为输入源,sscanf是以字符串作为输入源。
大忽悠爱学习
2021/03/02
3.5K0
sscanf函数-----字符串拆分函数
【C语言】输入/输出函数详解
在C语言中,输入/输出操作是通过标准库函数来实现的。这些函数分为两类:标准输入输出函数和文件输入输出函数。为了使用这些函数,我们需要包含头文件stdio.h,即在代码的开头加入:
LuckiBit
2024/12/11
2770
【C语言】输入/输出函数详解
C++字符串输入函数小结
看了网上有人写的,不是很全,而且还有几处错误,所以自己重新找了一下MSDN中的相关内容。
用户7886150
2021/02/17
8480
C/CPP输入输出函数汇总分析
scanf,printf,getc,putc,getchar,putchar,gets,puts,fgets,fputs,fgetc,fputc,fscanf,fprintf等.
CtrlX
2023/03/21
1.9K0
C语言常用函数表
任何一门语言的重点绝对不是语法或词汇(等效于编程的接口),它的唯一用途是沟通。因此编程语言是为了让计算机服务于我们而存在的。因此我们知其然,但不记其所以然,只要知道它的用途就可以了。
Homqyy
2024/08/23
1380
C 标准库基础 IO 操作总结
打开文件其实就是在操作系统中分配一些资源用于保存该文件的状态信息及文件的标识,以后用户程序可以用这个标识做各种读写操作,关闭文件则释放占用的资源。
用户3105362
2021/02/04
9970
轻松拿捏C语言——【文件操作】
程序文件:包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows 环境后缀为.exe)
用户11162265
2024/06/14
950
轻松拿捏C语言——【文件操作】
C++中的输入函数scanf使用方法详解
scanf函数是C和C++中常用的输入函数之一,可以从用户输入的标准输入流stdin中读取格式为指定类型的数据。其基本用法如下:
很酷的站长
2023/08/25
2.8K0
C++中的输入函数scanf使用方法详解
流动的代码:文件流畅读写的艺术(三)
scanf、fscanf 和 sscanf 是 C 语言中用于输入操作的函数,特别是用于格式化输入。它们属于标准输入/输出库,用于按照指定格式从不同来源读取数据。 以下是它们的基本详情和区别:
用户11029103
2024/03/19
1540
流动的代码:文件流畅读写的艺术(三)
C/CPP输入输出函数汇总分析
scanf,printf,getc,putc,getchar,putchar,gets,puts,fgets,fputs,fgetc,fputc,fscanf,fprintf等.
CtrlX
2022/11/11
1.3K0
C语言进阶-文件操作超详解
scanf/printf、fscanf/fprintf、sscanf/sprintf函数对比
用户9645905
2022/11/30
1K0
C语言进阶-文件操作超详解
C语言从入门到实战——文件操作
C语言中的文件操作是通过使用文件指针来实现的。可以使用标准库中的函数来打开、读取、写入和关闭文件。
鲜于言悠
2024/03/20
4730
C语言从入门到实战——文件操作
C语言 —— 指尖跃迁 刻印永恒 - 文件操作
我们从键盘输入数据,向屏幕上输出数据,并没有打开流呢?那是因为C语言程序在启动的时候,默认打开了3个流:
迷迭所归处
2025/04/17
1040
C语言 —— 指尖跃迁 刻印永恒 - 文件操作
【C语言】常用函数汇总表
通过这些表格和示例,你可以掌握C语言中各类常用函数的功能和使用方法。如果你需要进一步深入了解某个函数或需要更多示例,随时告诉我!
LuckiBit
2024/12/11
3060
【C语言】常用函数汇总表
C语言进阶(十四) - 文件管理
我们知道写的C程序是运行在内存上的,当程序运行结束后,程序相关的数据就消失了,这些数据并没有保存起来。如何保存程序运行产生的数据呢?我们可以把数据保存到磁盘文件中。通过C语言的文件相关的知识,我们将会有办法把程序运行产生的数据写入我们指定的磁盘文件中。 磁盘(外存)中的文件存放的信息是持久化的,不会像运行在内存中的程序那样,在程序运行结束或突然计算机断电等情况导致数据消失。
怠惰的未禾
2023/04/27
1K0
C语言进阶(十四) - 文件管理
C语言常用字符串操作函数整理(详细全面)
功能:   从标准输入读入字符,并保存到s指定的内存空间,直到出现换行符或读到文件结尾为止 参数:   s:字符串首地址 返回值:   成功:读入的字符串   失败:NULL
嵌入式与Linux那些事
2021/05/20
3.9K0
C语言——文件操作
磁盘上的文件是文件。 但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件
小李很执着
2024/06/15
1620
C语言——文件操作
文件操作——C语言
如果没有文件,我们写的程序的数据都是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等程序再次运行,我们是无法看到上次程序的数据的。如果想要将数据持久化的保存,我们可以使用文件来存储数据。
星辰与你
2024/10/17
1310
文件操作——C语言
【C 语言文件操作】—— 内存映射与高效 I/O 策略的深度融合
当我们要准确地指定一个文件以便计算机能够找到并操作它时,就需要同时使用路径和文件名。它们共同构成了文件的完整标识,让操作系统知道去哪里找到这个特定的文件。
换一颗红豆
2024/12/20
3610
【C 语言文件操作】—— 内存映射与高效 I/O 策略的深度融合
相关推荐
sscanf,sscanf_s及其相关使用方法「建议收藏」
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验