пустая строка файла процесса c ++ в конце файла

когда я использую c ++ для обработки файла, я обнаружил, что в конце файла всегда есть пустая строка. Кто-то говорит, что vim будет добавлять ‘\ n’ в конец файла, но когда я использую gedit, он также имеет тот же вопрос. Может кто-нибудь сказать мне причину?

1 #include<iostream>
2 #include<fstream>
3
4 using namespace std;
5 const int K = 10;
6 int main(){
7         string arr[K];
8         ifstream infile("test1");
9         int L = 0;
10         while(!infile.eof()){
11             getline(infile, arr[(L++)%K]);
12         }
13         //line
14         int start,count;
15         if (L < K){
16             start = 0;
17             count = L;
18         }
19         else{
20             start = L % K;
21             count = K;
22         }
23         cout << count << endl;
24         for (int i = 0; i < count; ++i)
25             cout << arr[(start + i) % K] << endl;
26         infile.close();
27         return 1;
28 }

while test1 file just:
abcd
but the program out is :
2
abcd

(upside is a blank line)

2

Решение

while(!infile.eof())

infile.eof() только верно после Вы пытались прочитать за конец файла. Таким образом, цикл пытается прочитать еще одну строку, чем есть, и получает пустую строку в этой попытке.

3

Другие решения

Это вопрос порядка, вы читаете, назначаете и после проверки …
Вы должны немного изменить свой код, чтобы прочитать, проверить и назначить:

std::string str;
while (getline(infile, str)) {
arr[(L++)%K] = str;
}

http://www.parashift.com/c++-faq-lite/istream-and-eof.html

Как определить, является ли это EOF при использовании getline () в c ++

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector