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