что не так с этим кодом "реализация индикатора длины"? - PullRequest
0 голосов
/ 25 апреля 2010

это реализация поля индикатора длины но он зависает, и я думаю, что застрял в петле и ничего не показывает.

// readx22.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "iostream"
#include "fstream"
#include "stdio.h"
using namespace std;


class Student
{
public:
 string id;
 size_t id_len;
 string first_name;
 size_t first_len;
 string last_name;
 size_t last_len;
 string phone;
 size_t phone_len;
 string grade;
 size_t grade_len;
 void read(fstream &ven);
 void print();
};
void Student::read(fstream &ven)
{
 size_t cnt;
 ven >> cnt;
 id_len=cnt;
    id.reserve( cnt );
    while ( -- cnt ) {
        id.push_back( ven.get() );
    }

 ven >> cnt;
 first_len=cnt;
    first_name.reserve( cnt );
    while ( -- cnt ) {
        first_name.push_back( ven.get() );
    }

 ven >> cnt;
 last_len=cnt;
    last_name.reserve( cnt );
    while ( -- cnt ) {
        last_name.push_back( ven.get() );
    }

 ven >> cnt;
 phone_len=cnt;
    phone.reserve( cnt );
    while ( -- cnt ) {
        phone.push_back( ven.get() );
    }

 ven >> cnt;
 grade_len=cnt;
    grade.reserve( cnt );
    while ( -- cnt ) {
        grade.push_back( ven.get() );
    }

}
void Student::print()
{
// string::iterator it;
 for ( int i=0 ; i<id_len; i++)
  cout << id[i];

}
int main()
{
 fstream in;
 in.open ("fee.txt", fstream::in);
 Student x;
 x.read(in);
 x.print();
 return 0;
}

спасибо

Ответы [ 2 ]

3 голосов
/ 25 апреля 2010

Вы, вероятно, должны были использовать cnt-- вместо -- cnt везде. Первая нулевая строка запускает чрезвычайно большой цикл, который в конечном итоге потребляет всю память (за исключением, может быть, в 64-битной ОС). На самом деле, даже не заморачивайтесь с этим исправлением. Цикл по get() крайне неэффективен, просто позвоните read().

0 голосов
/ 25 апреля 2010

Если я правильно понимаю ваш вопрос, вы видите бесконечный цикл при запуске этого?

Мне было бы интересно узнать, что такое cnt перед каждым циклом.

Кроме того, ваш код на самом деле превращается в x.print () ?


Кроме того, это звучит как прекрасное время, чтобы вынуть отладчик и запустить его в своем коде. Если это бесконечный цикл, отладчик очень быстро скажет вам, где вы застряли.

...