c语言小白现阶段对输入字符串数组的函数的拙见

本文对比了C语言的gets和fgets以及C++的getline和cin.getline在输入字符串方面的优缺点,强调了fgets和getline的安全性,并提到了scanf和cin的局限性,以及getch和getchar的区别和用途。
摘要由CSDN通过智能技术生成

一.

现阶段:从c开始学起的,c++只知道一些基本函数的使用方法。

二.

1)用于输入字符串数组的函数

c语言输入字符串数组的函数包括:gets,fgets。

①gets():渐渐被淘汰掉了,因为该函数有安全隐患,无法处理数组越界问题。
(用法:gets(char *p),只需传入一个数组作为参数)

fgets():相比①安全性高了,因为该函数会限定输入数组的长度,现阶段我就用的这个输入字符串数组。
用法:fgets(char *p,int lenth,FILE *stream)
其中stream:文件指针。用于指定从哪个文件中读取字符串。在从标准输入读取字符串时,可以将其设置为 stdin。)

注意:两者在读取时都读取回车产生的‘\n’,并把它放到字符串数组中,这也是这俩函数不太好用的一个点吧,一般做题要把这个‘\n'用替代的方法换成’\0'。

2)c++输入字符串数组的函数包括:getline,cin.getline

getline():好用!!!不仅会限定输入数组的长度,保证安全性,而且还能把回车产生的‘\n’给“销毁”了,不但不会把它放到字符串数组中,而且还不会滞留在缓冲区中!

but有个重要的点:cin.getline 函数将字符串存储在字符数组中,而 getline 函数将字符串存储在 string 类型的对象中。这是两种不同的数据类型,使用时需要根据具体的需求和编程习惯来选择。对于string和字符串数组,两者各有优劣。

而且由于我现在还是用c语言写代码,不希望代码中c和c++一起使用,所以这个函数目前用不上,等我学完c上手c++再试试用这个处理字符串!

用法:istream& getline(istream& is, string& str, char delim)其中str 是一个字符串对象的引用,用于保存读取到的数据。注意:getline是把读取到的放到string中而不是char*数组中哦!

;delim是指定分隔符,如果不设置会默认是‘\n');

istream&:未知术语,查了一下:istream& 是一个 C++ 中的流(stream)类型,表示输入流,常用于重载输入运算符 >>。它通常被用来从标准输入设备(如键盘)或文件中读取数据,并将读取的数据放入程序中。常用还是cin标准输入。

cin.getline():也较为常用,和c函数库的fgets一样,会把换行符读取到字符串数组中。

用法:cin.getline(char* s, streamsize count, char delim) 其中streamsize 是 C++ 标准库中的一个整数类型,用于表示流操作的大小或位置。它通常用作流操作函数的参数类型,可以与int进行区分;)

三.

scanf与cin输入字符串 = =

缺点:遇到空格等特殊符号会停止读取,比如一个句子,用scanf和cin只能读句子的第一个单词。

but如果用do-while一个一个读取也不是不行,只是效率……确实够低,而且代码相对冗长

四.

与本文主题无关:

c中读取单个字符的函数有getch(),getchar()

上网查了这俩的区分与用法:

  1. 区别:

    • getch 函数是非标准函数,在 <conio.h> 头文件中定义。它通常在 Windows 环境下使用,用于从控制台窗口中立即获取一个字符,无需按下 Enter 键。
    • getchar 函数是标准函数,在 <stdio.h> 或 <cstdio> 头文件中定义。它用于从标准输入流中获取一个字符,并需要用户按下 Enter 键才能接受输入。它是跨平台的标准函数,可以在各种编译环境中使用。
  2. 用法:

    • getch 的使用方式是直接调用该函数,它会立即读取一个字符并返回字符的 ASCII 值(整数类型)。示例代码如下:
       #include <conio.h> // ... int ch = getch(); 
    • getchar 的使用方式是调用该函数,并将返回的字符保存在 int 类型的变量中。示例代码如下:
       #include <stdio.h> // ... int ch = getchar(); 

需要注意的是,getch 函数在某些编译器或操作系统中可能不可用,而且它是一个过时的函数,不建议在现代 C/C++ 程序中使用。如果要在控制台环境下获取单个字符,可以考虑使用 <conio.h> 中的其他函数(如 _getch_getwch),或者使用更现代化的方法,如使用 <iostream> 头文件中的 std::cin.get() 函数。

总结起来,getch 是非标准的、只在 Windows 环境下可用的函数,可以立即读取一个字符而无需按下 Enter 键。而 getchar 是标准函数,用于从标准输入流中获取一个字符,并需要用户按下 Enter 键才能接受输入。

③我觉得把getch()没啥好用的,也就放在while里面用char ch=getch()能发挥些许用处?但getchar()就不一样咯,常用于清理缓冲区的空格啊,换行符啊等等= =还是有点小用处。

五.

以上大多是个人现阶段对用于输入字符串函数的拙见,带有很强的主观认识。学无止境,写这篇文章的目的是希望等我之后学深一点,回头再看一遍时能找到一些错误,并从中得到新的启发。未来道阻且长,行则将至!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值