C++中C风格的字符数组的输入(有无空格)

C风格的字符数组(字符串): 类型 数组名[常量值];

1. 输入不含空格的字符串

       1)scanf:

输入abcdef

输出abcdef


       2)cin

输入abcdef

输出abcdef


2. 输入包含空格的字符串

        scanf:

       当使用scanf输入字符串时,与占位符%s配合使用。%s:从当前第一个非空白字符开始读起,直到遇到空白字符(即空格、换行符、制表符等)为止。scanf:遇到%s占位符,会在字符串的末尾存储一个\0作为字符串结束的标志。(特点:遇到空格、换行符、制表符会停止读取,并自动在末尾加 \0。

        cin:

       使用cin输入字符串时,cin遇到空白字符时,会认为字符串结束,不再继续,同时在已经读取到的字符串末尾加上\0。(特点:同样遇到空格停止读取,并自动加 \0。)

所以上述scanf和cin都不适用于输入包含空格的字符串。

        1)fgets:只能用于C风格字符数组(char[]

       从第一个字符开始,最多读取num-1个字符,最后一个位置留给\0,如果num的长度远大于输入的字符串长度,就会一直读到\n(换行符)停止并且会读取\n,将\n作为读取到内容的一部分,同时在读取到的内容后自动加上\0。

   fgets 的函数原型:

             参数str:必须是 char[] 或动态分配的 char*

         n:最大读取字符数(包括末尾的 \0)。

        stream:输入流(如 stdin)。

fgets(放哪去,最多读多少个字符,从哪里读(一般是从键盘上读:stdin))

        将 fgets 的数据存入 std::string(间接方法):先读入 char[],再转 std::string。


          2)scanf

        占位符:%[^\n]s:一直读取到\n为止,不会将\n读进来,但会在读取到的字符串后加上\0


           3)getchar

         一次只读一个字符,即一个一个字符的读取。需要手动添加字符串结束符\0。


             4)使用 cin.get() 或 cin.getline() 

         cin.get() 和 cin.getline() 主要用于字符数组(char[]),而不是 std::string


总结对比

方法是否读取空格是否读取 \n是否自动加 \0适用场景
scanf("%s")❌ 遇到空格停止无空格输入
cin >> str❌ 遇到空格停止C++无空格输入
fgets✅ 读取空格✅ 读取 \n整行输入(推荐)
scanf("%[^\n]s")✅ 读取空格❌ 不读 \n整行输入(无 \n
getchar✅ 逐个字符读可自定义❌ 需手动加 \0精细控制输入
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值