读取字符串时注意事项

cin和getline的读取

 1、`cin`:

用于读取不包含空格的字符串。例如:

string word;
cin >> word;

        这只会读取空格前的字符串部分。
 

2、`getline`:

用于读取整行,包括其中的空格。例如:
     

string line;
getline(cin, line);

这会读取直到遇到换行符的整行字符串。

3、其他关于字符串输入的注意事项

①关于cin.ignore()的用处

如果先使用cin读取了一个或多个值,然后紧接着想使用getline读取一行,可能会意外地发现getline直接跳过了,没有读取任何内容。

这是因为cin在读取完之后会留下一个换行符在输入缓冲区,getline会立即读取这个换行符并认为输入结束。为了解决这个问题,可以使用cin.ignore()来清除换行符。

②关于 \r\n 、 \n

历史背景:回车和换行有不同之处。

在打字机上,

"回车"(\r)意味着移动打印头到行首,

"换行"(\n)意味着向下移动纸张一行,但打印头位置不变。

由于这两个动作在打字机上是分开的,所以它们在计算机编码中也被区分开来。

技术实现:

Unix/Linux:在这些系统上,只使用\n来表示新的一行。所以,当你在Unix或Linux系统上按“Enter”键时,实际上是输入了\n字符。

Windows:在Windows系统上,新的一行使用\r\n来表示。也就是说,\r将光标移动到行首,然后\n将光标移动到下一行。

现代问题:

特别是从文件或其他来源读取字符串时,由于

Unix/Linux:使用\n作为行结束符。

Windows:使用\r\n作为行结束符。

这些差异在以下情境中可能会导致问题:

跨平台文件读取:如果你在Windows系统上创建了一个文本文件,然后在Linux系统上读取,可能会意外地在行尾看到\r字符。

使用getline读取:getline默认使用\n作为分隔符,但如果你读取一个含有\r\n的文件(如Windows格式的文件),getline可能会将\r作为字符串的一部分读取进来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值