简单的哄骗Windows Api 解决c++ <iostream>内Cin输入的小缺点
添加时间:2013-7-22 点击量:
1.很多常用的标准C输入输出函数是字符界面的,例如【prinf,scanf】,【cout,cin】等,实际上他们都是经由过程体系的动态链接库导出,例如:crtdll.dll 。
这些函数先处理惩罚字符串在调用WriteConsole,ReadConsole等函数实现操纵。
2这里先看一下<iostream>中Cin的缺点
测试代码:
1 #include<iostream>
2 #include<windows.h>
3 using namespace std;
4
5 int main()
6 {
7 char name[20];
8 cout<<请输入姓名:;
9 cin>>name;
10 cout<<\n\n成果反馈:<<name<<\n\n;
11 system(pause);
12 return 0;
13 } 实验截图1:
注解:我们输入的姓名是Jack Chen 但cin处理惩罚为Jack,这很正常,因为我们只定义了一个char型数组变量,而我们不成能再去定义第二个变量,若是姓名为N项目组,我们如何定义变量呢?
3.我们哄骗Windows Api来解决这个题目
1 #include<iostream>
2 #include<windows.h>
3 using namespace std;
4
5 int main()
6 {
7 HANDLE hcin; //定义把握台句柄
8 hcin=GetStdHandle(STD_INPUT_HANDLE); //获取当前把握台窗口句柄
9 if(hcin)
10 {
11 char cin1[MAX_PATH]; //定义Char型数组变量
12 cout<<请输入姓名:;
13 DWORD len2;
14 if(ReadConsole(hcin,cin1,MAX_PATH,&len2,NULL)) //调用把握台ReadConsole函数记录所输入的数据 关键参数为第四个.
15 {
16 cout<<\n信息反馈:;
17 for(int i=0;(DWORD)i<=(len2-1);i++) //此行中(DWORD)i类型转换只是为了避免编译器报警告
18 {
19 cout<<cin1[i];
20 }
21
22 }
23 else
24 {
25 cout<<输入失败!;
26 }
27 }
28 else
29 {
30 cout<<\n获取句柄失败;
31 }
32 cout<<\n;
33 system(pause);
34 return 0;
35 } 实验截图2:
容易发怒的意思就是: 别人做了蠢事, 然后我们代替他们, 表现出笨蛋的样子。—— 蔡康永
1.很多常用的标准C输入输出函数是字符界面的,例如【prinf,scanf】,【cout,cin】等,实际上他们都是经由过程体系的动态链接库导出,例如:crtdll.dll 。
这些函数先处理惩罚字符串在调用WriteConsole,ReadConsole等函数实现操纵。
2这里先看一下<iostream>中Cin的缺点
测试代码:
1 #include<iostream>
2 #include<windows.h>
3 using namespace std;
4
5 int main()
6 {
7 char name[20];
8 cout<<请输入姓名:;
9 cin>>name;
10 cout<<\n\n成果反馈:<<name<<\n\n;
11 system(pause);
12 return 0;
13 } 实验截图1:
注解:我们输入的姓名是Jack Chen 但cin处理惩罚为Jack,这很正常,因为我们只定义了一个char型数组变量,而我们不成能再去定义第二个变量,若是姓名为N项目组,我们如何定义变量呢?
3.我们哄骗Windows Api来解决这个题目
1 #include<iostream>
2 #include<windows.h>
3 using namespace std;
4
5 int main()
6 {
7 HANDLE hcin; //定义把握台句柄
8 hcin=GetStdHandle(STD_INPUT_HANDLE); //获取当前把握台窗口句柄
9 if(hcin)
10 {
11 char cin1[MAX_PATH]; //定义Char型数组变量
12 cout<<请输入姓名:;
13 DWORD len2;
14 if(ReadConsole(hcin,cin1,MAX_PATH,&len2,NULL)) //调用把握台ReadConsole函数记录所输入的数据 关键参数为第四个.
15 {
16 cout<<\n信息反馈:;
17 for(int i=0;(DWORD)i<=(len2-1);i++) //此行中(DWORD)i类型转换只是为了避免编译器报警告
18 {
19 cout<<cin1[i];
20 }
21
22 }
23 else
24 {
25 cout<<输入失败!;
26 }
27 }
28 else
29 {
30 cout<<\n获取句柄失败;
31 }
32 cout<<\n;
33 system(pause);
34 return 0;
35 } 实验截图2:
容易发怒的意思就是: 别人做了蠢事, 然后我们代替他们, 表现出笨蛋的样子。—— 蔡康永