} } }

    简单的哄骗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 forint 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:


    分享到QQ空间伴侣网微博


    容易发怒的意思就是: 别人做了蠢事, 然后我们代替他们, 表现出笨蛋的样子。—— 蔡康永
    分享到: