C语言输入一个字符串的方法有哪些

 更新时间:2023年06月06日 15:28:10   作者:Jambo!  
字符串输入是C语言编程中非常重要的部分,其中scanf函数是一种广泛使用的输入字符串的方法,下面这篇文章主要给大家介绍了关于C语言输入一个字符串的方法有哪些的相关资料,需要的朋友可以参考下

用scanf输入字符串(有限制)

整个字符串处理

scanf()printf()函数中,%s指的就是字符串
所以我们就可以使用scanf("%s",str)printf("%s",str)从键盘处读取字符串并将字符串打印出来

代码如下:

int main()
{
	char str[10] = { 0 };
	scanf("%s", str);
	printf("%s", str);
	return 0;
}

这里要注意的一点是:在scanf函数中,后面的参数必须是一个地址,如输入一个整形变量:scamf("%d",&a),都需要进行&取地址操作
但是数组名就已经是地址了(详解请点击观看我的一篇关于数组名到底是什么的文章)
所以直接用数组名即可,不用进行取地址

如果我们输入一个连续的字符串如:abcde,这段代码会正常运行

然而,如果输入一个非连续,也就是中间有空格的字符串时,代码只会打印出第一个空格以前的内容

这是因为在键盘与scanf函数中,存在一个输入缓冲区,从键盘输入的内容会存放到这个缓冲区中

scanf并不会读取走空格,它只能读取走字符以及字符串
例如当从键盘输入字符串abc 123(注意abc123之间是有一个空格的),在缓冲区中如图:

scanf首先会将字符串abc取走,然后在abc后面有一个空格,scanf无法读取走空格,所以虽然从键盘输入abc 123,但是最后只有abc被存放在了str
所以最后只输出了abc

总结一下scanf

输入值之前的空白(空格、制表符、换行符)会被跳过,输入值之前的空白表示结束。因此,用%s格式码输入字符时,中间不能包括空白

这里注意的是:前面讲的scanf无法读取输入缓冲区中的空格甚至是回车,这里的scanf指的是scanf("%s",str),只是函数中是%s才无法读取,而如果是scanf("%c",&character),输入一个字符,对于空格和回车都是能正常输入的,这里不要弄混

所以,用scanf接受字符串是有局限性的。

逐个字符处理

前面已经讲了,用scanf接受字符串是由局限性的,当字符串中含有空格,scanf函数只能读取第一个空格以前的字符串,但是如果非要用scanf进行接受字符串,只能是逐个字符处理

代码如下:

#include<stdio.h>
int main()
{
	char ch[10]; 
	for (int i = 0; i < 10; i++)
	{
		scanf("%c", &ch[i]);
	}
	for (int i = 0; i < 10; i++)
	{
		printf("%c", ch[i]);
	}
	return 0;

这样也可以进行对于字符串的输入以及输出

用getchar()输入字符串

getchar()与scanf最大的区别就是,getchar可以读取走输入缓冲区中的空格以及回车

这里的内容我i之前有一篇文章进行了详细讲解,请点击查看

代码如下:

int main()
{
	char str[20] = { 0 };
	char ch = 0;
	while ((ch = getchar()) != '\n')
	{
		putchar(ch);
	}
	return 0;
}

用gets()输入字符串(简单快捷)

这里介绍一个新的函数gets(),此函数在头文件string.h中,使用此函数需要加头文件#include <string.h>
gets函数的官方格式: char * gets ( char * str );
在参数列表中,需要传一个字符型指针,也就是我们要输入的字符串的名(数组的名)
gets()函数的主要作用就是接受从键盘输入的一个字符串
gets当遇到换行符\n或者EOF时停止,并将读取的结果存放在str指针所指字符数组中

#include <stdio.h>
#include<string.h>
int main()
{
	char str[10];
	printf("请输入字符串");
	gets(str);
	printf("请输出字符串");
	printf("%s", str);
	return 0;
}

输入带有空格的字符串也可以正常输出

其实还存在一个与gets函数配套的函数puts函数,用来输出字符,具体用法与printfputchar无差别

#include <stdio.h>
#include<string.h>
int main()
{
	char str[10];
	printf("请输入字符串: ");
	gets(str);
	printf("请输出字符串: ");
	puts(str);
	return 0;
}

gets函数与scanf、getchar的一些区别

在前面的scanf函数和getchar函数中,回车都需要值得注意,但是在get函数中,回车不作为读取内容,遇到回车时,系统自动用\0代替回车\n,所以输入一行字符串后按下回车,就完成了一次输入

gets函数一遇到回车就结束,并把这个回车从缓冲区中移走,这点与scanf不同,scanf是遇到回车,空格就结束,但并不会将回车、空格从缓冲区中移走

gets函数只会遇见回车时结束遇到空格、制表符都会正常读取,而scanf遇到空格、回车、制表符都会结束,getchar遇到空格、回车、制表符都正常读取

总结

到此这篇关于C语言输入一个字符串的方法有哪些的文章就介绍到这了,更多相关C语言输入字符串内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言全排列回溯算法介绍

    C语言全排列回溯算法介绍

    大家好,本篇文章主要讲的是C语言全排列回溯算法介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • C++利用两个栈实现队列的方法

    C++利用两个栈实现队列的方法

    这篇文章主要给大家介绍了关于C++利用两个栈实现队列的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C++具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • C语言的动态内存分配及动态内存分配函数详解

    C语言的动态内存分配及动态内存分配函数详解

    这篇文章主要为大家详细介绍了C语言的动态内存分配及动态内存分配函数,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • C++命名空间5种常见用法实例解析

    C++命名空间5种常见用法实例解析

    这篇文章主要介绍了C++命名空间5种常见用法实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • C语言实现数字游戏

    C语言实现数字游戏

    这篇文章主要为大家详细介绍了C语言实现数字游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-01-01
  • C++设计模式之迭代器模式(Iterator)

    C++设计模式之迭代器模式(Iterator)

    这篇文章主要为大家详细介绍了C++设计模式之迭代器模式Iterator,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • C++读写INI配置文件的类实例

    C++读写INI配置文件的类实例

    这篇文章主要介绍了C++读写INI配置文件的类,实例分析了C++操作ini配置文件的相关技巧,需要的朋友可以参考下
    2015-06-06
  • C++回调函数的理解和使用教程

    C++回调函数的理解和使用教程

    这篇文章主要给大家介绍了关于C++回调函数的理解和使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • C++异步数据交换实现方法介绍

    C++异步数据交换实现方法介绍

    这篇文章主要介绍了C++异步数据交换实现方法,异步数据交换,除了阻塞函数 send() 和 recv() 之外,Boost.MPI 还支持与成员函数 isend() 和 irecv() 的异步数据交换
    2022-11-11
  • C++ 类的赋值运算符''''=''''重载的方法实现

    C++ 类的赋值运算符''''=''''重载的方法实现

    这篇文章主要介绍了C++ 类的赋值运算符'='重载的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02

最新评论