c++ - 在字符串中输入换行符
问题描述
在这两种情况下,我\n
作为用户输入(在字符串中)输入一个,我\n
在程序本身中作为字符串的一部分(没有用户输入):
string str1;
cin>>str1; //case 1 - \n entered as the part of the input
string str="hello\n"; //case 2
情况1 \n
被视为输入字符串的一部分,而情况2被视为换行符 - 为什么?
解决方案
转义序列是仅编译器时的文字。当您的编译器在字符串中遇到 \ 时,它会在之后查找模式以确定值。当您从控制台读取时,一次读取一个字符。大多数调试器会将输入的字符串显示为"hello\\n"
,或分解为单个字符:
'h','e','l','l','o','\\','n'
当您在代码中手动设置字符串时,例如string str = "hello\n"
,编译器会识别转义序列并将其视为单个字符'\n'。这允许程序员在不去打印字符的 ASCII 值的情况下使用简写方式来打印字符。另一方面,用户有一个输入按钮来方便地添加换行符,并且程序通常面向具有人类可读界面(即,如果我输入一个'\'字符,我希望它是一个'\',如果我没有使用电脑的经验)
关于cin的另一个注意事项是它使用换行符和其他空格来区分输入的种类。函数 getline 用于字符串输入以解决此问题,但流提取是从空格到空格完成的,因此它与所有数据类型(int、float、char 等)一致
推荐阅读
- hyperledger-fabric - Hyperledger Fabric 中的会员服务提供商 (MSP) 到底是什么?
- android - 如何使用 Kotlin 以编程方式设置工具栏的边距
- c++ - C++:char* 与 char(*)[]
- flutter - I want to implement text overflow wrap inside gesture detector
- spring-boot - How to use eureka.client.service-url: property of netflix eureka in spring cloud
- c# - 如何使用实体框架更新数据库中的数据
- javascript - Scale down
- c# - 如何将来自文本文件的日期和文本与 SQL Server 中的日期和文本进行比较,并根据需要进行进一步的转换?
- javascript - 如何让 DeviceOrientationEvent 和 DeviceMotionEvent 在 Safari 上工作?
- python - 如何使用 SQLAlchemy 在插入时解析相关的外键?