如何解决C ++为什么不计算文本文件中的其他空白行?
我创建了此函数以返回文本文件中的行数:
int numberOfLinesInFile(string dataFile){
ifstream inputFile;
inputFile.open("data.txt");
int numberOfLines,data;
while(!inputFile.eof()){
inputFile >> data;
numberOfLines++;
}
cout << "Number of lines: " << numberOfLines << endl;
inputFile.close();
return numberOfLines;
}
我注意到的一个有趣的事情是该函数正确地计算了非空白行的数量(末尾还有一个额外的空白行),但是没有计算额外的空白行。例如,如果这是我的文件:
234
453
657
然后,该函数返回4
,因为文本文件中有四行。但是,如果我的文件末尾包含多个空白行:
234
453
657
该函数再次返回4
。
为什么会这样?这与eof
指令有关吗?
编辑:
好的,谢谢@MikeCAT,让我了解问题出在哪里。根据@MikeCAT的答案,我将while
循环更改为:
while(!inputFile.eof()){
if(inputFile >> data)
numberOfLines++;
else{
cout << "Error while reading line " << numberOfLines + 1 << "!" << endl;
}
}
我正在递增numberOfLines
,但不确定该行是否已实际读取。
解决方法
首先,您在<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no">
<meta name="author" content="">
<title>Find My Cutout</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous">
<!-- Custom styles for this template -->
<link href="css/landing-page.css" rel="stylesheet">
</head>
<body>
<!-- Masthead containing HEading -->
<header class="masthead text-white text-center">
<div class="overlay"></div>
<div class="container">
<div class="row">
<div class="col-xl-9 mx-auto">
<h1 class="mb-5">Test JSON</h1>
</div>
<div class="col-md-10 col-lg-8 col-xl-7 mx-auto">
</div>
</div>
</div>
</header>
<section class="features-icons bg-light text-center">
<div id="ancestor">
<div class="container">
<div class="row">
<div class="col-lg-12">
<div class="features-icons-item mx-auto mb-5 mb-lg-0 mb-lg-3">
<input type="text" id='search' name="contacts" class="form-control form-control-lg" placeholder="Enter your order number" maxlength="4">
<button type="submit" class="btn btn-block btn-lg btn-success" value='Search' onclick='searchValue()' id="submit" disabled>Search Order ID</button>
<div id='resultDiv'></div>
</div>
</div>
</div>
</div>
</div>
</section>
<script src="order.js" type="text/javascript"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!-- Forces user to enter in order # at min and max of 4 characters --->
<script>
$('#ancestor input').on('keyup',function() {
var contacts = $('input[name=contacts]').val();
$('#submit').prop('disabled',!(contacts.length >= 4));
});
</script>
<!-- Allows enter button on keyboard to submit --->
<script>
var input = document.getElementById("search");
input.addEventListener("keyup",function(event) {
if (event.keyCode === 13) {
event.preventDefault();
document.getElementById("submit").click();
}
});
</script>
</body>
</html>
之后执行numberOfLines++;
,而没有检查读取是否成功。这很不好,导致额外的计数。
第二,inputFile >> data;
读取整数,并在整数之前跳过空格字符。
为避免这些问题,您应该使用std::getline()
来计数行数。
也不要忘记初始化inputFile >> data;
。
numberOfLines
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。