我想要计算代码中的行数我已经想到我需要从文件中查找特定字符,并在每次找到它时递增1。现在我有一个普遍的要点,但我很难弄清楚如何读取文件中的每一行。我已经发布了迄今为止的内容。任何帮助将不胜感激
#include<fstream>
#include <iostream>
using namespace std;
int main()
{
ifstream readfile;
readfile.open("project1b.cbp");
int number_of_lines=0;
char = ch;
while(ch !=EOF)
{
if(ch!='endl'||';')
number_of_lines++;
}
return 0;
}
答案 0 :(得分:2)
该行
if(ch!='endl'||';')
不按你的想法行事。您正在检查ch
是否等于endl
,还是;
。由于;
始终为真(非零),因此您在这里并没有真正有用的比较。
你可能会想到
if(ch!='endl'|| ch!=';')
或类似的东西。不确定你想要通过比较实现什么......
至于你问题的另一部分 - 排名靠前的谷歌&#34; C ++逐行读取文件&#34;引导您进入以下stackoverflow答案:
https://stackoverflow.com/a/7868998/1967396
这就是你所需要的一切。
还有一件事 - 您需要为自己更清楚地定义一行&#34;代码行&#34;是。基本上是&#34;任何回车,或任何分号&#34;新线?分号后跟新行怎么样?有两个分号的行(一行有两个语句)怎么样?
要清除你的想法,你需要更多的困惑。我建议你将逻辑分成
最后的想法:单引号' '
用于定义字符常量。双引号" "
用于定义字符串常量。行尾字符通常为\n
或\r
;在C ++中,我们使用std::endl
作为编写它的方式 - 但它不在引号中。当您使用namespace std
时,您可以在endl
时写下'\n'
。但是在它周围加上单引号会让我感到困惑 - 也可能是编译器。
答案 1 :(得分:0)
您可以使用std::getline
获取每一行。
答案 2 :(得分:0)
试试这个:
#include <fstream>
#include <iostream>
using namespace std;
int main(int argc, char **argv){
if(argc!=2){
cout<<"Syntax: "<<argv[0]<<" <FILENAME>"<<endl;
return -1;
}
ifstream readfile(argv[1]);
if(!readfile.good()){
cout<<"Failed to open file: '"<<argv[1]<<"'!"<<endl;
return -1;
}
int number_of_lines=0;
while(readfile.good()){
char ch=readfile.get();
if(ch=='\n'|| ch==';')
number_of_lines++;
}
cout<<"Number of lines: "<<number_of_lines<<endl;
return 0;
}
与您的代码存在一些差异。
ifstream readfile(argv[1])
加载文件。这符合C ++中常用的RAII(资源获取是初始化)方案。我不使用close()
语句,因为ifstream将超出范围并自动清理自己。使用RAII可以使您的代码更清晰,更不容易出错。get()
从字符流中获取新字符。您的代码中缺少这个。\n
(换行符)字符是我们当前正在查看的字符时,或者我们正在查看;
字符时,会出现该行的结尾。 endl
不是一个字符常量 - 它更像是一个流操作符 - 所以你不能以你的方式使用它,也不能一般地比较这种类型。||
)除以两个完整的逻辑语句,您使用它的方式((ch!='endl'||';')
)不会像您认为的那样工作。你应该问问自己这是否真的是你想要计算代码行的方式。例如,for构造(for(int i=0;i<N;++i)
)最终会使用您的指标看起来像三行代码。