C++調試斷言錯誤背景: 這裏顯示的問題/代碼是我試圖創建的一個更大的程序(我被告知要修剪它)的一部分。 (本節的目的)是爲了能夠接收std :: cin輸入和(當它工作時)將它饋送到函數中:srcdsControl-> WriteText(string(chr));這個功能是大型程序的一部分,我沒有創建自己的程序。std :: cin >> char
我正在嘗試將輸入和輸出從C++控制檯應用程序重定向到一個Python腳本(我已經編寫,哪些工作)。當我輸入控制檯窗口時,它會收到輸入罰款。然而,當我把輸入到程序的標準輸入從蟒蛇(格式「命令\ r \ n」),它會觸發以下錯誤:
我試着用以下兩個程序他們給出了完全相同的錯誤。
我的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知識++是非常有限。我需要一個特定/簡單的答案。
我的問題:如何防止此錯誤並確保輸入正確接收?如果需要,我很樂意使用完全不同的方法來接收輸入,但需要特定的演示。
考慮使用'std :: getline'來讀取數據,因爲您似乎正在尋找完整的行。 '\ r'只是窗口中行標記的一半。請參閱對話底部的小記,「按重試以調試應用程序」,並利用此機會。 – user4581301
*如何防止此錯誤* - 在將C++代碼放入更大的程序之前,您可能已寫入一個非常小的「主」程序,只有這些線路才能看到它的行爲。不需要引入Python,線程或調用'WriteText'來執行此測試,以瞭解C++流如何工作。這將被認爲是[mcve]而不是代碼片段。 – PaulMcKenzie
@PaulMcKenzie我現在編輯的帖子只是顯示一個小'main'程序。 – ZSmith