0
所以調試代碼時,下面我得到一個「調試斷言失敗」錯誤窗口消息:爲什麼設置setmode時使用getline會導致「調試斷言失敗」消息?
Expression: ((_Stream->_flag & _IOSTRG) || (fn = _fileno(_Stream),
(_textmode_safe(fn) == __IOINFO_TM_ANSI) && !_tm_unicode_safe(fn))))
但是,如果我註釋掉setmode線,是沒有問題的。
調試總是在包含getline的行中斷開。我應該如何修改代碼才能使用getline掃描數據?
#include "stdafx.h"
#include <iostream>
#include <string>
#include <io.h>
#include <fcntl.h>
int _tmain(int argc, _TCHAR* argv[])
{
_setmode(_fileno(stdin), _O_U16TEXT);
_setmode(_fileno(stderr), _O_U16TEXT);
_setmode(_fileno(stderr), _O_U16TEXT);
std::string myString;
getline(std::cin, myString);
std::cout << "You typed in " << myString << std::endl;
std::cin.get();
return 0;
}
斷言的哪個子表達式評估哪個值?如何使用'std :: wcin'?如何去除對'_setmode()'的調用?在任何情況下,您都深深陷入實現定義的行爲,因此請檢查您正在使用的特定編譯器的文檔。另外,將該編譯器及其版本添加到該問題中。 –
什麼是這些'_setmode' whatsits?你可以指向文檔嗎?你爲什麼不使用標準功能? –
@lazarea:將問題添加到問題中。不在評論部分。對_問題。 –