2010-04-25 4 views
0

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

// 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; 
} 

благодаря

+0

вы можете написать на консоль все, что приходит, чтобы точно определить проблему, например. что содержит 'cnt'. также покажите код при записи записей, потому что, судя по тому, как объявлен класс, можно подумать, что длина идет после строки. –

ответ

3

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

+0

спасибо, это работает –

+0

+1, так как cj может забыть. – erisco

+0

Спасибо всем. :-) –

0

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

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

Кроме того, делает ли ваш код действительно x.print()?


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

+0

да, я вижу бесконечный цикл CNT читает, как долго строка , например: 4wine CNT читает 4 и использовать его для чтения строки нет я думаю, что бесконечный цикл существует в x.read() –

 Смежные вопросы

  • Нет связанных вопросов^_^