【发布时间】:2015-02-19 00:16:35
【问题描述】:
我创建了这个程序来计算单词和行数,但是当我输入一个只有\n 的文件时,它说有一个单词不是我想要的。有什么想法吗?
#include <stdio.h>
int main()
{
FILE *file;
char word[1000];
int c;
int NumLines = 0;
int NumWords = 0;
int was_space = 1;
printf("Enter file name: ");
scanf("%s", word);
file = fopen(word, "r");
while ((c=fgetc(file)) !=EOF) {
if (c == '\n') {
NumLines++;
if (was_space == 0) {
NumWords++;
was_space = 1;
}
was_space = 1;
}
else if ((c == '\t' || c == '-' || c == ':' || c== ' ') && was_space == 0) {
NumWords++;
was_space = 1;
}
else if (c != '\n' && c != '\t' && c != '-' && c != ':' && c != ' ') {
was_space = 0;
continue;
}
else if (was_space == 1)
continue;
}
printf("%d %9d\n", NumLines, NumWords);
fclose(file);
return;
}
【问题讨论】:
-
您确定文件中没有两个
\n? -
你的调试告诉你什么?
-
调试的一般技巧:确保程序得到的和你认为得到的是一样的。一个简单的 printf("%c", c);在你的循环顶部将显示你的程序得到什么作为输入。
-
第二个
else if,你知道ch不能是'\n'。您应该错误检查来自fopen()的返回值;人们经常拼错文件名。 -
包括
char阅读和打印的计数。while ((c=fgetc(file)) !=EOF) { count++;怀疑将 > 1。
标签: c word-count line-count