c - 如何在计数中包含文件的最后一个单词
问题描述
我写了一个简单的程序,它将计算文件中每个单词的长度:
length = 0;
while ((c = getchar()) != EOF){
++ length;
if (c == ' ' || c == '\n' || c == '\t'){
-- length;
printf("length of last word: %d\n", length);
length = 0;
}
}
现在它确实做到了,直到它到达最后一个词。我理解它为什么这样做,因为它只会在达到某种形式的空白时计算一个单词,而在最后一个单词之后没有任何空白。所以我想知道让这段代码在文件中包含最后一个单词的方法是什么?
解决方案
一种方法是在循环完成后打印最后一个单词的长度。
while ((c = getchar()) != EOF){
++ length;
if (c == ' ' || c == '\n' || c == '\t'){
-- length;
printf("length of last word: %d\n", length);
length = 0;
}
}
if (length > 0) {
printf("length of last word: %d\n", length);
}
另一种方法是更改循环条件并在打印后跳出循环。
while (1){
++ length;
if (c == ' ' || c == '\n' || c == '\t' || c == EOF){
-- length;
printf("length of last word: %d\n", length);
length = 0;
}
if (c == EOF) {
break;
}
}
顺便说一句,不是length
在块中增加然后减少它,而是if
简单地将增量移动到一个else
块中。或者只是打印length-1
。
并且在变量和变量之间放置一个空格是不习惯++/--
的。
推荐阅读
- version-control - Dockerfile 应该提交到哪个代码存储库?
- python-3.x - 如何比较列表中的数字
- python - 如何重置产量和停止迭代
- cpu - RISCV:如何计算分支指令?
- javascript - 从 api 获取的数据不会作为 props 传递给嵌套组件
- vb.net - 此代码用于按列对列表视图中的项目进行排序,但它是如何工作的?
- sass - 如何使用 Bootstrap 的 bg-variant 修饰符
- excel - 在一个范围内查找一个值并检查上面行中的第二个值
- python-3.x - 有什么办法可以将浏览文件按钮更改为它的文件路径?
- angular - *ngFor 不更新值变化