使用std :: cin>>进行C ++调试断言错误炭

时间:2017-09-24 15:45:05

标签: c++ console-application stdout stdin

背景: 这里显示的问题/代码是我想要创建的一个更大的程序的一部分(我被告知要修剪它)。 (本节)的目的是能够接收std :: cin输入和(当它工作时)将其输入函数:srcdsControl-> WriteText(string(chr));这个函数是较大程序的一部分,我自己没有创建它。

我试图将输入和输出从C ++控制台应用程序重定向到Python脚本(我已编写,哪些有效)。当我输入控制台窗口时,它接收输入正常。但是,当我从python发送输入到程序的stdin时(格式为'命令\ r \ n'),它会触发以下错误:

C++ Debug Assertion Failed error

我已经尝试过以下两个程序并且它们会给出完全相同的错误。

我的C ++代码(测试1):

#include "stdafx.h"
#include <iostream>
#include <string>

int main()
{
    try
    {
        char chr[2];
        chr[1] = 0;
        while (1)
        {
            if (std::cin >> std::noskipws >> chr[0])
            {
                if (chr[0] == '\r')
                    std::cout << "\r";
                //srcdsControl->WriteText(string(chr));
                std::cout << std::string(chr) << "\r\n";
            }
        }
    }
    catch (...)
    {
        // Ignore exception and just stop the thread.
    }
}

我的C ++代码(测试2):

#include "stdafx.h"
#include <iostream>
#include <string>

int main()
{
    try
    {
        char chr[2];
        chr[1] = 0;
        while (1)
        {
            std::string s = "";
            if (std::getline(std::cin, s))
            {
                for (char& ch : s) {
                    chr[0] = ch;
                    if (chr[0] == '\r')
                        std::cout << "\r";
                    //srcdsControl->WriteText(std::string(chr));
                    std::cout << std::string(chr) << "\r\n";
                }
            }
        }
    }
    catch (...)
    {
        // Ignore exception and just stop the thread.
    }
}

注意:我不是C ++开发人员,而且我对C ++的了解非常有限。我需要一个特定/简单的答案。

我的问题:如何防止此错误并确保正确接收输入?如果需要,我很乐意使用完全不同的方法来接收输入,但需要对其进行具体演示。

1 个答案:

答案 0 :(得分:0)

我设法解决了我自己的问题。

#include "stdafx.h"
#include <iostream>
#include <string>

int main()
{
    try
    {
        char chr[2];
        chr[1] = 0;
        while (1)
        {
            char c;
            if (std::cin >> std::noskipws >> c)
            {
                chr[0] = c;
                if (chr[0] == '\r')
                    std::cout << "\r";
                //srcdsControl->WriteText(string(chr));
                std::cout << std::string(chr) << std::endl;
            }
        }
    }
    catch (...)
    {
        // Ignore exception and just stop the thread.
    }
}

这段代码似乎做了我想要的而没有给出错误。如果有人能够解释为什么这种方法有效并且之前的代码没有那么有用,那就知道了。