그래서 재미있는 오류가 있습니다.C++는 여분의 문자를 생략하거나 추가합니다.
if (isQuote(ch))
{
//Add it to the Buffer
strBuffer += ch;
do
{
//get Next Character from ifstream and add it to the strBuffer
getNextAndAdd(ch);
// check whether it is a \\'
if (isBackslash(ch) && (this -> peek() == '"'))
{
//if it is a backslash, activate check checkQuote
checkQuote = true;
}
//if it is another quote, dectivate check Quote otherwise, break the system
if (isQuote(ch))
{
if (checkQuote)
{
checkQuote = false;
}
else
{
break;
}
}
//IF EOF, do NOT continue repeating the last character
if (input -> eof()){break;}
}
while (isPrintable(ch)); // check that it falls within the SXL acceptance range
if (ch == '"')
{
//IF EOF, do NOT continue repeating the last character
if (input -> eof()){break;}
//output Buffer for TEST purposes
cout << strBuffer << endl;
//create new token and push it into the vector
tk = new Token (tkstring, strBuffer, row, col);
tokensUsed.push_back(tk);
startNewString();
}
tokenMatch = true;
}
getNextAndAdd (CH)
void getNextAndAdd(char ch)
{
ch = nextChar();
strBuffer += ch;
}
로 번역하고 나는 그것을 테스트 데이터를주고있다 : 나는이 코드 조각을 (이 부분 코드)이있다. 나는 테스트 데이터를 입력하는 텍스트 파일을 가지고있다. 문제는 내가 예를 들어 "abc" "def"
을 쓰면 그 사이에 ONE Space를 쓰면 "abc" 123
으로 읽히고 후자는 NUMBER로 완전히 다른 경우라면 두 공간 의미 "abc" "def"
의미가 있으며 두 문자열로 읽게됩니다. 또한 WHITESPACE인지 확인했지만 후자의 경우 2 개의 SPACE가 있으면 마지막 빈 공간이 실제로 공백임을 인식합니다.
이유가 무엇입니까? 나는 그 잘못 어쩌면 말 문자열의 마지막 문자를 제거하려하지만, 당신이 방금 ch
에서 읽을 수있는 문자를 리턴 할 생각 "hello
감사
이유 'gdb'가 존재합니다. 특정 테스트 사례로 취해진 일련의 유한 동작에 대해 이야기하고 있습니다. 디버깅은 * ideal *입니다. 이미 * 깨졌거나 * 볼 수있는 위치가 있습니다 (게시 된 코드는 실행할 수 없습니다). ** 디버거를 사용하여 파손을 방지하십시오 **. – WhozCraig
이유는 모르겠지만 Code :: Blocks는 모든 지시를 따랐음에도 불구하고 디버깅을 허용하지 않습니다. 단지 밀리 초 동안 검은 화면이 나타나고 닫힙니다. – DodoSerebro