首页 > 其他分享 >C语言专题之get相关函数介绍

C语言专题之get相关函数介绍

时间:2024-12-06 23:32:53浏览次数:10  
标签:字符 专题 读取 get scanf C语言 getchar 换行符 函数

265fdbf36622416389d8955b13051581.webp

欢迎浏览,以下是对C语言中相关“get”函数结合函数原型的详细介绍:

一、 getchar函数

  1.函数原型:int getchar(void);

  2.详细介绍:

      1.这个函数不需要参数,它从标准输入流(通常是键盘输入)读取一个字符。

      2.函数返回值为读取到的字符的ASCII码值(以int类型返回)。如果发生错误或者到达文件末尾(例如在重定向输入时到达文件末尾),则返回EOF(EOF是一个在<stdio.h>中定义的宏,通常为 -1)。

   示例代码:8e59224c94b54ae190a813d0edd79f58.jpg

在这个示例中,getchar读取一个字符,然后putchar将其输出。

但getchar这个函数通常还要另一个作用,就是用于吸收scanf后的换行符,下面我将详细介绍。

在C语言中,getchar函数通常用于从标准输入读取一个字符。当与scanf函数一起使用时,getchar可以用来吸收scanf函数留下的换行符。这是因为scanf函数在读取输入时,通常会在缓冲区中留下一个换行符,尤其是在读取数值或字符串后。如果不处理这个换行符,它可能会被后续的输入函数(如gets或另一个scanf)误读为有效输入。


示例代码:
例如,以下代码展示了getchar如何用于吸收scanf后的换行符:
ac7cb93aa3f642bebefecc096b203f50.jpg

在这个例子中,scanf函数用于读取一个整数,然后getchar函数用于吸收scanf留下的换行符。这样,当fgets函数用于读取字符串时,它就不会读取到这个换行符,而是等待用户输入新的字符串。

注意事项:
需要注意的是,getchar函数只能吸收一个字符,因此如果scanf函数留下的换行符后面还有其他字符,getchar函数只能吸收换行符,而不能吸收后续的字符。在这种情况下,可能需要使用循环来确保所有不需要的字符都被吸收。
此外,getchar函数的返回值通常是一个整数,因此在使用时需要注意将其转换为字符类型。如果getchar函数返回EOF(文件结束符),则表示已经到达输入流的末尾。

二、 gets函数(不推荐使用,C11已废弃)

  1.函数原型:char *gets(char *s);

  2.详细介绍:

      1.该函数以一个字符指针s作为参数,这个指针指向一个足够大的字符数组,用于存储读取的字符串。

      2.函数会从标准输入读取字符,直到遇到换行符'\n'或者文件末尾。它会把读取到的字符串(不包括换行符)存储在s指向的数组中,并在字符串末尾添加'\0'字符。

      3.但是,由于它不检查输入字符串的长度是否会超出数组的大小,很容易导致缓冲区溢出,从而产生安全隐患,故C11已废弃,部分编译器如vs2022可能不支持这个函数。

三、 fgets函数

  1.函数原型:char *fgets(char *s, int n, FILE *stream);

  2.详细介绍:

      1.第一个参数s是一个字符指针,指向用于存储读取字符串的字符数组。

      2.第二个参数n表示要读取的最大字符数(包括最后的'\0'字符)。通常建议n的值比数组实际大小大1,以便能够存储换行符。

      3.第三个参数stream是一个指向FILE类型的指针,表示要从中读取数据的文件流。当stream为stdin时,就是从标准输入读取数据。

      4.函数从stream指向的文件流中读取字符,直到遇到换行符'\n'、读取了n - 1个字符或者到达文件末尾。然后将读取到的字符串(包括换行符,如果读取到的话)存储在s指向的数组中,并在末尾添加'\0'字符。

      5.如果成功读取,函数返回s(即指向存储读取字符串的数组的指针);如果遇到文件末尾且没有读取到任何字符,则返回NULL;如果发生错误,也返回NULL。

   示例代码:d9125ea58d85433e94415fae9bb06bd7.jpg

注意:在这个示例中,fgets从标准输入读取最多9个字符(加上最后的'\0'字符共10个),并将结果输出。

四、 scanf函数(部分与“get”相关的功能)

  1.函数原型:int scanf(const char *format,...);

  2.详细介绍:

      1.第一个参数format是一个格式化字符串,用于指定输入的格式。后面的省略号表示可变参数,用于存储根据格式字符串解析后的数据。

      2.当format字符串中包含%c格式说明符时,可以用于读取单个字符,类似于getchar的部分功能。例如scanf("%c", &c);会从标准输入读取一个字符存储到变量c中。

      3.当使用%s格式说明符时,可以读取一个字符串,但它与gets和fgets有所不同。scanf读取字符串时,会以空白字符(空格、制表符、换行符等)作为字符串的结束标志,并且不会自动在读取的字符串末尾添加'\0'字符(需要确保目标数组有足够的空间容纳字符串和'\0'字符)。

      4.scanf函数的返回值表示成功读取的项目的个数。如果没有读取任何项目,或者匹配失败,则返回0。如果在成功读取任何数据之前,发生了读取错误或者遇到读取到文件结尾,则返回常量EOF(EOF在stdio.h中定义,通常为-1)。

以上则是get相关函数的介绍,点个关注,防止迷路,欢迎大家共同学习交流!!!

526eb774cc8b44d7a318ac1d60855f75.webp

标签:字符,专题,读取,get,scanf,C语言,getchar,换行符,函数
From: https://blog.csdn.net/2401_89278589/article/details/144302124

相关文章

  • C语言:指针基础指导
    1:任何一个地址变量,在没有被赋值之前,没有得到实际的变量地址之前,不能通过*去访问任何数据。一.理解一个变量的存储过程和原理(必须清楚掌握)1、两个操作:(1)inta:在栈中定义了一个变量a,并且在内存中开辟了一个int类型大小的空间,即4个字节,然后让a指向这篇空间,也就是这篇空间,计......
  • C语言第六部分(循环结构)
    C语言循环结构什么是循环代码的重复执行,就叫做循环。循环的分类无限循环:其实就是死循环,程序设计中尽量避免无限循环。程序中的无限循环必须可控。有限循环:循环限定循环次数或者循环的条件。循环的构成循环条件循环体当型循环的实现特点:先判断,后执行,如果条件不满足,......
  • 初探C语言|浅谈函数的递归
    文章目录1.什么是递归?2.递归的两个必要条件代码示例3.两个例题(阶乘和斐波那契)发现问题为什么呢?stackoverflow(栈溢出)常规写法(迭代)4.递归与迭代相比较欢迎讨论:如有错误或不足,欢迎指正和建议,本人主打“听劝”。当然,如有疑问,也期待你在评论区留言互动。点赞+关注:如果......
  • (王道练习代码仓库)408考研真题2022 年42题————C语言
    题目:代码实现:#include<stdio.h>#include<stdlib.h>#include<time.h>#include<string.h>typedefintElemType;typedefstruct{ ElemType*elem; intTableLen;}SSTable;voidST_Init(SSTable&ST,intlen)//申请空间,并进行随机数生成{ ST.Ta......
  • 学习C语言升级c++的笔记
    此篇文章在2022年2月8日被记录,工作这两年多了,也没用过C++做开发,令人唏嘘1、#include<cmath>#include<cstdio>用这种方法来调用C语言中的函数2、namespace名字空间,防止命名重复::叫做限定调用符usingnamespaceX:引入整个名字空间usingX::name使用单个名字X::na......
  • c语言题目 之 杨氏矩阵
    杨氏矩阵,就是行和列里面的值都是越来越大的;第一种:通过结构体将坐标带回第二种:通过指针将坐标带回//方法一:structpoint{ intx; inty;};structpointserch_(int(*p)[4],intr,intc,intn){ intx=0; inty=c-1; structpointrety={-1,-1}; ......
  • C语言实验 二维数组
    时间:2024.12.6一、实验7-1矩阵运算代码 #include<stdio.h>intmain(){inta[20][20]={0};intn,i,j;intsum=0;scanf("%d",&n);for(i=0;i<n;i++){for(j=0;j<n;j++){scanf("%d",&a[i][j])......
  • C语言:assert断言(如何让程序在不满足条件时报错)
    目录简介如何使用简介assert()是包含在assert.h头文件的宏,用于在运行时确保程序符合指定的条件,如果不符合条件,就报错并终止运行。这个宏被称为“断言”例子:assert(a>b);这个代码的作用就是,如果程序运行到该行代码时,不满足a>b这个条件的话,程序便会报错并停......
  • 使用命令将nupkg包上传到公司nuget使用方法
    使用命令将nupkg包上传到公司nuget使用方法1.查询版本号包版本号查询地址:http://package-version.xxx.com/,发布已有存在的nubkg文件,需查询之前的版本号,避免重复。2.在要上传dll的项目中生成nuget包文件2.1配置生成nuget信息,在需要生成包文件的类库项目上右键-->属性配置应用......
  • 渗透测试-Kioptix Level 1靶机getshell及提权教程
    声明!学习视频来自B站up主泷羽sec有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!工具地址:通过网盘分享的文件:OSCP靶场链接:https:/......