【字符串】gets函数详解

article/2025/10/31 22:47:45

在前面从键盘输入字符串是使用 scanf 和 %s。其实还有更简单的方法,即使用 gets() 函数。该函数的原型为:

1 #include <stdio.h>
2 char *gets(char *str);

这个函数很简单,只有一个参数。参数类型为char*型,即str可以是一个字符指针变量名,也可以是一个字符数组名。

gets() 函数的功能是从输入缓冲区中读取一个字符串存储到字符指针变量 str 所指向的内存空间。

下面将前面中使用 scanf 输入字符串的程序改一下:

1 # include <stdio.h>
2 int main(void)
3 {
4     char str[20] = "\0";  //字符数组初始化\0
5     printf("请输入字符串:");
6     gets(str);
7     printf("%s\n", str);
8     return 0;
9 }

可见,gets() 函数不仅比 scanf 简洁,而且,就算输入的字符串中有空格也可以直接输入,不用像 scanf 那样要定义多个字符数组。也就是说:gets(str); 完全可以取代 scanf("%s",string);

不仅代码更简洁,而且可以直接输入带空格的字符串。同样,前面章节中,对字符指针变量所指向的内存单元进行初始化也可以用 gets(),下面将那个程序也改一下,将 scanf 换成 gets():

 1 #include<stdio.h>
 2 int main(void)
 3 {
 4     char str[30];
 5     char *string=str;//一定要先将指针变量初始化
 6     printf("请输入字符串:");
 7     gets(string);//也可以写成gets(str);
 8     printf("%s\n",string);//输出参数是已经定义好的”指针变量名“
 9     return 0;
10 }

此外,关于使用 gets() 函数需要注意:使用 gets() 时,系统会将最后“敲”的换行符从缓冲区中取出来,然后丢弃,所以缓冲区中不会遗留换行符。这就意味着,如果前面使用过 gets(),而后面又要从键盘给字符变量赋值的话就不需要吸收回车清空缓冲区了,因为缓冲区的回车已经被 gets() 取出来扔掉了。下面写一个程序验证一下:

 1 #include<stdio.h>
 2 int main(void)
 3 {
 4     char str[30];
 5     char ch;
 6     printf("请输入字符串:");
 7     gets(str);
 8     printf("%s\n",str);
 9     scanf("%c",&ch);
10     printf("ch = %c\n",ch);
11     return 0;
12 }
我们看到,没有清空缓冲区照样可以输入'Y',因为 gets() 已经将缓冲区中的回车取出来丢掉了。如果前面使用的不是 gets() 而是 scanf,那么通过键盘给 ch 赋值前就必须先使用 getchar() 清空缓冲区。这里为什么输入nihaoma 指挥出现是因为scanf 条件限制符为单个字符%c。

转载于:https://www.cnblogs.com/Luthais/p/10200900.html


http://chatgpt.dhexx.cn/article/fDPAi7er.shtml

相关文章

C#-String.ToString()用法

常用格式举例&#xff1a; &#xff08;1&#xff09; int i12345; this.textBox1.Texti.ToString(); //结果 12345&#xff08;this指当前对象&#xff0c;或叫当前类的实例&#xff09; this.textBox2.Texti.ToString(“d8”); //结果 00012345 &#xff08;2&#xff09; in…

String和get

String和get 在ch4的作业中暴露出了我不懂的一些问题&#xff0c;主要是和String有关的定义和头文件以及和get有关的函数。 String 在C中如果想定义字符串型&#xff0c;即String a&#xff1b;则需要用到头文件<string>或<string.h> 有些人会问&#xff0c;这两个…

String类的getChars的用法

str.getChars(0,str.length(),ch,0); 参数1&#xff1a; 从0索引开始 参数2&#xff1a;复制指定的长度 参数3&#xff1a;目标数组 参数4&#xff1a;从目标数组的指定索引位置粘贴 进入看一下源码&#xff1a; public static void arraycopy(Object src, int srcPos, Obj…

关于Java里面的String.getBytes()方法

关于Java里面的String.getBytes()方法 Java里面的String类型的编码方式是Unicode&#xff0c;根据你项目字符串的编码方式无关&#xff0c;这是写死的。但是如果你jvm平台使用的是GBK编码方式&#xff0c;那么你通过string里面的getBytes()方式获取的字符的字节是2。如果使用的…

字符串输入函数gets()

在前面讲过键盘输入函数 scanf 和 %s.其实还有更简单的方法,就是使用 gets() 函数,该函数的原型为: #include<stdio.h> char *gets(char *str);这个函数很简单,只有一个参数,参数类型为char *型,即 str 可以是一个字符指针变量名,也可以是一个字符数组。 gets()…

getchar()和gets()

因为最近被getchar弄的很烦所以今天中午好好梳理一下 getchar() 从缓冲区读走一个字符&#xff0c;相当于清除缓冲区 前面的scanf()在读取输入时会在缓冲区中留下一个字符\n&#xff08;输入完s[i]的值后按回车键所致&#xff09;&#xff0c;所以如果不在此加一个 getcha…

getAsString()和toString()区别

getAsString源码 toString()返回的是JsonElement的字符串&#xff0c;所有是带双引号的&#xff0c;eg: “hello” getAsString()返回的是JsonElement的字符串值&#xff0c;所以不带双引号&#xff0c;eg:hello

String类中getBytes()方法的使用

String是我们常用到的字符串类&#xff0c;今天我学习的时候需要将字符串转换为一个一个字节储存起来&#xff0c;查看String类的API发现其中有一个getBytes()方法&#xff0c;那么这个具体是怎么使用的呢&#xff1f; 先上测试结果吧 。 这里我们首先声明了一个byte类型的数组…

Resources中getString方法解析

在Android开发中&#xff0c;我们的字符串一般都是统一写在项目的res/values/strings.xml中&#xff0c;如果我们需要得到指定的字符串&#xff0c;一般使用getString方法来得到。 其实getString特别的有用&#xff0c;而且用法也很灵活&#xff0c;下面我们就来说说这个方法。…

c语言 编写getString函数(运用malloc函数,不使用数组)

定义一个返回值为char*类型的函数 定义一个char类型字符&#xff08;传入&#xff09;用malloc函数在堆区开辟一个新的空间存字符串定义一个char*类型指针标记字符串首地址定义一个char*类型字符串为空定义一个int类型变量计数while循环&#xff0c;当传入字符c不等于‘\n’时…

JavaGUI开发实践:登录界面模拟(连接数据库)

文章目录 1. 实现功能概要2. 功能界面概览3. 代码详解&#xff08;1&#xff09;选择身份登录方法实现&#xff08;2&#xff09;登录按钮的响应 4. 全部代码示例5. 包的存放位置6. 项目全部代码下载地址&#xff1a;JavaGUI超市进销存管理系统 所有代码7. Java GUI其他相关博客…

JavaGUI设计-计算器

.利用GUI程序设计方法实现简单计算器的设计。运行效果可设计为如下界面&#xff0c;也可设计为windows系统中的计算器样式。 &#xff08;此程序为整数计算&#xff09; 1 基础页面设计 2 流布局器使用 3 单选按钮注册监听事件 4 文本框中内容获取&#xff0c;数据覆盖 除法 …

Java之GUI

&#xff08;本文为博主JAVA课程学习总结&#xff09; GUI —— 图形化用户界面 JFC&#xff08;Java Foundation Classed&#xff09;是开发GUI的API集 JFC包括&#xff1a;AWT&#xff08;Abstract Window Toolkit抽象窗口工具包&#xff09;、Swing组件&#xff08;建立在…

JAVA--GUI

AWT(Abstract WindowToolkit抽象视窗工具组)包括了很多类和接口&#xff0c;用于java.Application的GUI(Graphics User Interface图形用户界面)编程&#xff0c;GUI的各种元素&#xff08;如&#xff1a;窗口&#xff0c;按钮&#xff0c;文本框等&#xff09;由java类来实现。…

JavaGUI------------常用的组件(标签、按钮)

目录 1.标签 2.按钮 1.标签 类&#xff1a;JLabel作用&#xff1a;显示文本或者提示信息 构造函数&#xff1a; new JLabel();new JLabel(Icon icon);//设置图标new JLabel(Icon icon&#xff0c;int aligment);//设置图标水平对齐方式new JLabel(String str&#xff0c;i…

javaGUI基础知识

*注: 作者使用的是 jdk1.8.0_121 版本,可根据下方链接进行下载 jdk1.8.0_121 64位 jdk1.8.0_131 32位 1.基础界面 Frame frame new Frame(); frame.setVisible(true);2.关闭按钮监听 frame.addWindowListener(new WindowAdapter(){Overridepublic void windowClosing(Windo…

Java GUI程序示例

Java GUI程序示例 与命令行界面相比&#xff0c;图形界面对于用户来说更为简便易用。图形用户界面&#xff08;Graphical User Interface&#xff0c;简称 GUI&#xff09;&#xff0c;关于Java图形用户界面&#xff0c;可参见 https://blog.csdn.net/cnds123/article/details…

JavaGUI界面实现跳转

页面跳转&#xff1a; 思路&#xff1a; 先定义一个类继承JFrame&#xff1b;定义要用的控件&#xff0c;再在构造方法中对定义的控件进行修改&#xff0c;后写出主函数&#xff0c;在主函数中调用构造方法。同理&#xff0c;在idea中&#xff0c;将需要跳转的几个界面置于同一…

JavaGUI显示表格(连接数据库)基础

文章目录 一、界面概览二、代码三、代码解释四、项目全部代码下载地址五、 项目代码说明六、功能更新&#xff1a;根据下拉单内容查询不同数据库6.1 界面概览6.2 用到的主要控件 七、其他相关博客7.1 <a href"https://blog.csdn.net/SKMIT/article/details/106676478&q…

Java-GUI简介

JavaSwing-GUI开发简介&#xff08;1&#xff09; 本期介绍一些GUI的基本知识&#xff0c;开发GUI程序的时候直接用windowbuilder生成框架&#xff0c;傻瓜式拖拽就行&#xff0c;非常简单。 一、布局管理器 1.1:FlowLayout(流式布局) 1.2:GridLayout(网格布局) 1.3:Grid…