鱼C论坛

 找回密码
 立即注册
查看: 1441|回复: 0

[技术交流] 对string的一些思考

[复制链接]
发表于 2016-1-8 21:57:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 yzyou521 于 2016-1-8 21:58 编辑

今晚看结构体看的晕头转向,忽然想玩string类
于是写了个string的小代码,运行之后吃了一斤!
各位看官请看:
#include "stdafx.h"//VS2015需要,6.0注释即可
#include <iostream>
#include <string>

int main()
{
        using namespace std;
        cout << "A bad program.";
        string Name;
        int n;
        cin >> n;
        getline(cin, Name);
        cout << n << ":" << Name << endl;
        return 0;
}

//Q1*************************************
输入:25(回车)OMG
VC++6.0 给的回答是:        25:
VS2015        输入25回车之后直接给答案: 25:
//Q2*************************************
这让我实在迷惑,于是进行了另外一次测试:
输入:        25(空格)OMG
VC++6.0 给的回答是:        等待用户继续进行输入;
VS2015        回答是:                25:OMG

//Thinking for Q1
VC++6.0中,输入n时,默认用户输入之后需要以
回车结束,但是输入Name之后,没有任何作用,它
还是读取了换行符,这...回车的两种功能居然
在同一个代码中体现出来,这让我如何是好?
还有一个让我无法忍受的答案:
当我输入:25(空格)Name(回车)test的时候,6.0
给的回答是:        25:Name.
Name后的回车当作输入n的结束标志,又把25后的
空格当作n的输入结束标志,真是匪夷所思!

VS2015在回车后直接识别了换行符'\n',于是进
行了输出.


//Thinking for Q2
VC++6.0中,输入25(空格)OMG后,等待输入,这说明
我对thingking for Q1的猜想是对的.
VS2015直接给出了我想要的答案,这说明VS2015在
识别用户输入时,会以空格来识别输入是否完成.
PS(VS2015能以空格来识别是否完成,但能通过功能
函数来调整使得空格一同被读入到string变量中)

总结:无论是6.0还是11.0的C标准,一定要遵守string
读取输入的标准,那就是____代码中没有对空格进行
特殊处理(例如读取空格,将它作为string变量的一
部分)时,就以空格来当作输入结束的标识,即使是这
样,还是无法避免用户在回车后再一次输入后一个变量
这会让用户产生迷惑.


最后给懂汇编的前辈们留个"任务",汇编代码是如何
进行读取的,希望不吝赐教!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 18:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表