У меня есть задание для моего класса Software Engineering, который заставляет меня бананы. Мне было предложено создать счетчик строк, который учитывает только логические строки кода для любого заданного файла. Он должен опускать пустые строки и комментарии.Пропуск строк комментариев, начиная с // в C++
У меня код очень много работает, за исключением того, что он перечитывает номера строк на 2 строки независимо от того, какой файл я передаю в него. Я не могу для жизни меня видеть, где моя проблема, и было интересно, может ли кто-нибудь помочь мне.
Вот мой код:
#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
#include <stdio.h>
using namespace std;
int main() {
// Initialize variables
ifstream infile;
string filename;
int line = 0;
// Get file input
cout << "Enter the filename" << endl;
cin >> filename;
// open the file
infile.open(filename.c_str());
// read the lines and skip blank lines and comments
while(getline(infile, filename)) {
if(filename.empty() || filename.find("//") == true) {
continue;
}
// increment the line number
++line;
}
// close the file
infile.close();
// display results
cout << "There are " << line << " lines of code in this file." << endl;
}
Счетчик гласит в терминале: «Есть 24 строк кода в этом файле.»
Согласно моим расчетам, должно быть только 22 строки логического кода. Помощь была бы оценена.
Вам не нужно делать 'infile.open (filename.c_str())'. Просто 'infile.open (filename) 'будет делать. – emlai
@zenith: зависит от версии стандартной библиотеки. Перегрузка 'std :: string' была добавлена долго после того, как она должна была быть. –
Также вы не должны использовать функции, если не знаете, как их использовать. 'string :: find' возвращает позицию аргумента, если она была найдена в строке и' npos', если она не была найдена, а не логическое значение. – emlai