|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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变量的一
部分)时,就以空格来当作输入结束的标识,即使是这
样,还是无法避免用户在回车后再一次输入后一个变量
这会让用户产生迷惑.
最后给懂汇编的前辈们留个"任务",汇编代码是如何
进行读取的,希望不吝赐教! |
|