2015-11-14 3 views
2

Вот пример текстового файла, который я имею дело с:Как скопировать строку в txt-файл?

http://example.com/object1 50 0 
http://example.com/object2 25 1 
http://example.another.com/repo/objects/1 250 0 
ftp://ftpserver.abc.edu:8080 13 5 
... 

Я хочу передать URL, размер (первый номер), а также приоритет (второй номер) в массив. Вот мой код:

ifstream infile; 
infile.open("ece150-proj2-input.txt"); 

//Get the number of lines in the text file 
int lines = 0; 
while (!infile.eof()) { 
    string line; 
    getline(infile, line); 
    lines++; 
} 

//Get the components in the input file 
char url[lines][50]; 
float size[lines]; 
float delay[lines]; 
for (int i = 0; i < lines; i++) { 
    infile >> url[i] >> size[i] >> delay[i]; 
} 

//Testing if I get the url address correctly 
cout << url[0] << endl; 
cout << url[1] << endl; 

Однако результат несколько странный характер:

pĞQ? 
?Q? 

Почему это происходит? Может ли кто-нибудь решить эту проблему. Спасибо ;-)

+1

Вы уже прочитали EOF после цикла while, так что читать нечего. – Doorknob

ответ

0

Проблема здесь в том, что при чтении файла после того, как поток теперь находится в конце файла. Вам нужно либо позвонить infile.seekg(0, infile.beg);, чтобы перемотать назад в начало потока. Вы также можете закрыть и снова открыть infile.

Во-вторых, вы заявляете char url[lines][50]; Вы не можете этого сделать. Длина массивов в C++ должна составлять константы времени компиляции. Я действительно удивлен, что ваш код скомпилирован и дал вам любой результат.

Я бы порекомендовал вам использовать std :: vector, который похож на массив, но вы можете добавить элементы в конец. Таким образом вам не нужно знать количество строк перед рукой.