2017-01-18 17 views
0

제가 작업중인 프로젝트의 경우 텍스트 파일에서 정수를 읽으려고합니다. 이 경우, 그들은 같은 U = 220V 같은 변수로 지정됩니다, 그래서 나는 등호이 내가 가진 코드 올라와있다 된 V.에 로그인 한 후 읽기 위해 노력하고 있어요 다음에서텍스트 파일에서 정수로 읽기

if (word[0] == 'U') { 

       //declaring variables for checking for certain letters 
       char v = 'V'; 
       char m = 'm'; 
       char M = 'M'; 

       //taking in integer for voltage 
       while (word[i] != v) { 
        volt = volt + word[i]; 
        i++; 
       } 
       cout << volt << endl; 

테스트 케이스의 경우 U = 200V, U = 220V 및 U = 22000mV (m은 밀리이며 나중에 다른 함수로 처리됩니다)의 값이 파일 전체에 무작위로 삽입됩니다. 테스트를 거치면 출력이 표시됩니다.

첫 번째 출력이 정확합니다. 두 번째 및 세 번째 경우에는 처음에는 번호가 느슨하게 보이고 세 번째 경우에는 끝에 0이 추가되었습니다. 나는 원래 그냥 첫 번째 값을 폐기 한 생각, 내가 원래 처음에 읽은 값 전에 읽을 것입니다 가치를 어떻게 볼

volt = volt + word[i]; 

volt = volt + word[i-1]; 

에 코드의 라인을 변경했습니다.이에

=200 
=200 
=20000m 

내가 여기 내려다하고 내 코드의 논리에 결함이 있습니까 : 경우, 그것은으로 포맷 출력, 제대로 작동한다면 나는 그것이 할 무엇을 기대 했습니까?

EDIT : 더 이상 디버깅을 시도하면서 while 루프 외부에서 최종 인쇄 라인을 내부로 이동하여 루프가 단계별로 무엇을 출력하는지 확인했습니다. 2로 시작하고 200000m로 끝날 때까지 각 반복 끝에 0을 계속 추가합니다.

+1

std :: getline에는 = 단순하게 분할되는 오버로드가 있습니다. = 뒤에있는 텍스트를 문자열 스트림으로 팝핑하고 정수를 읽습니다. 읽기는 첫 번째 비 정수 문자, 예를 들어 V에서 중지됩니다. 그 문자를 읽으십시오. – user4581301

답변

1

문제는 각 반복 후에 i 및 볼트 값을 재설정해야하는 것으로 보입니다. 이 문제를 해결하기 위해, I 코드의 라인을 추가 :

volt = ""; 
i = 2; 

(i 원래 V 간과이 경우 2로 설정되고 통해 파싱 할 때 =)가 그때의 값을 인쇄 프로그램을 다시 실행 테스트하면 정확한 값이 출력됩니다. 당신이이 코드에서

while (myfile >> word) { 

     volt = ""; 
     i = 2; 

     //printing out words (remove) 
     cout << word << endl; 

     //checking for U in words 
      if (word[0] == 'U') { 

       //declaring variables for checking for certain letters 
       char v = 'V'; 
       char m = 'm'; 
       char M = 'M'; 

       //taking in integer for voltage 
       while (word[i] != v) { 
        volt = volt + word[i]; 
        i++; 
        //cout << volt << endl; 
       } 
       cout << volt << endl; 
0

: 그래서 코드의 전체 블록은, 업데이트, 지금처럼 보인다? 이 문자열 : "volt = volt + word [i];" - 숫자 2 (이 값은 50)와 1 카운트 숫자 "0"(이것은 48)의 2 카운트 ASCII 코드를 취하십시오. 그런 다음 결과를 얻습니다. 50 + 50 + 48 = 148. 이 코드가 수정되었습니다. 여기있어! 그러나 AnsiString 및 StrToInt 함수가 사용됩니다.

int volt=0, i=2; 
char word[20] = "U=220V\0"; 
AnsiString String; 

if(word[0] == 'U'){ 

    //declaring variables for checking for certain letters 
    char v = 'V'; 
    char m = 'm'; 
    char M = 'M'; 

    while(word[i] != v){ 
     //volt = volt + word[i]; 
     String += word[i]; 
     i++; 
     } 
    //cout << volt << endl; 
    volt = StrToInt(String); 
    }