2014-05-18 2 views
0

그래서 재미있는 오류가 있습니다.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

감사

+3

이유 'gdb'가 존재합니다. 특정 테스트 사례로 취해진 일련의 유한 동작에 대해 이야기하고 있습니다. 디버깅은 * ideal *입니다. 이미 * 깨졌거나 * 볼 수있는 위치가 있습니다 (게시 된 코드는 실행할 수 없습니다). ** 디버거를 사용하여 파손을 방지하십시오 **. – WhozCraig

+0

이유는 모르겠지만 Code :: Blocks는 모든 지시를 따랐음에도 불구하고 디버깅을 허용하지 않습니다. 단지 밀리 초 동안 검은 화면이 나타나고 닫힙니다. – DodoSerebro

답변

1
void getNextAndAdd(char ch) 
{ 
    ch = nextChar(); 
    strBuffer += ch; 
} 

으로 돌아가 셨습니다. 너는 틀릴거야. 이 코드를 실행 한 후 그 결과

:

if (isQuote(ch)) 
{ 
    //Add it to the Buffer 
    strBuffer += ch; 

    do 
    { 
     //get Next Character from ifstream and add it to the strBuffer 
     getNextAndAdd(ch); 

ch가 견적을 포함, 2 개의 따옴표는 strBuffer에 추가 된 것입니다.

+0

나는 ch = nextChar가 있음을 잊어 버렸습니다.(); 처음에는이 부분이 또 다른 반복문의 일부가되는 동안 – DodoSerebro

+0

'if (isQuote (ch)) '부분 앞에서, 맞습니까? 내 요점은 여전히있다. –

0

2 줄의 코드를 변경하여 수정했습니다. 내가 strBuffer += ch 것을 삭제하고 대신 또 다른 addAndGetNext(ch) 마지막 루프 문에서 추가 된 DO {} 루프

아래 addAndGetNext(ch)을 추가 곳

첫 번째 변화는 isQuote에서였다.

관련 문제