小弟初学MFC,最近我先将一个C程序封装成了类,完成后要编写一个对话框程序,调用类中的函数,其中有一个函数需要通过scanf函数来接收用户的输入从而采取相应的操作,请问各位大虾如何在我的windows程序总出现console窗口从而实现scanf函数的输入啊?先谢谢各位了。

解决方案 »

  1.   

    创建Win32 Console application
      

  2.   

    本帖最后由 xyzhaopeng 于 2010-04-29 17:50:01 编辑
      

  3.   

    void redirect_io()
    {
        // 重定向输出
        HANDLE hStdHandle;
        int fdConsole ;
        FILE *fp;
        AllocConsole();//分配一个控制台
        hStdHandle =(HANDLE)GetStdHandle(STD_OUTPUT_HANDLE); //取得控制台的输出句柄
        fdConsole = _open_osfhandle((intptr_t)hStdHandle , 0x4000);//句柄到文件描述符的转换
        fp = _fdopen( fdConsole , "w" );//打开此文件描述府
        *stdout = *fp;//重定向stdout到console的输出
    }程序中调用如上函数
      

  4.   

    利用AllocConsole() 
    在你的MFC程序中添加这些代码,可以获得控制台的输入,你试试         AllocConsole(); 
    freopen("CONOUT$","w+t",stdout); 
    freopen("CONIN$","r+t",stdin); 
    cout << "Input:" <<endl;
    int iTest = 0;
    cin >> iTest;
    fclose(stdout);
    fclose(stdin);
            FreeConsole(); afxDump << "Input Content:" << iTest << endl;
      

  5.   

    楼上的大哥,_open_osfhandle和intptr_t如何定义啊?
      

  6.   

    利用AllocConsole()  
    在你的MFC程序中添加这些代码,可以获得控制台的输入,你试试   AllocConsole();  
    freopen("CONOUT$","w+t",stdout);  
    freopen("CONIN$","r+t",stdin);  
    cout << "Input:" <<endl;
    int iTest = 0;
    cin >> iTest;
    fclose(stdout);
    fclose(stdin);
      FreeConsole();afxDump << "Input Content:" << iTest << endl;
    解决窗口一闪而过的问题可以加一个while,这样程序不退出就可以了
      

  7.   

     AllocConsole();   
    freopen("CONOUT$","w+t",stdout);   
    freopen("CONIN$","r+t",stdin);   
    cout << "Input:" <<endl;
    int iTest = 0;
    cin >> iTest;
    fclose(stdout);
    fclose(stdin);
      FreeConsole();afxDump << "Input Content:" << iTest << endl;int i;
    cin>>i;最后加个输入就好了,不输入就会一直存在了,呵呵
      

  8.   

    在InitInstance里做就不会一闪而过了