C语言如何输入一个字符串? 您所在的位置:网站首页 c语言地址符怎么读 C语言如何输入一个字符串?

C语言如何输入一个字符串?

2023-05-27 13:19| 来源: 网络整理| 查看: 265

C语言如何输入一个字符串? 用scanf输入字符串(有限制) 整个字符串处理逐个字符处理用getchar()输入字符串用gets()输入字符串(简单快捷) gets函数与scanf、getchar的一些区别

​​​​​​​用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(注意abc与123之间是有一个空格的),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 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可以读取走输入缓冲区中的空格以及回车

代码如下:

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

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

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

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

#include #include 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遇到空格、回车、制表符都正常读取.



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有