计算文件中的行和字的C程序给出错误的字输出

计算文件中的行和字的C程序给出错误的字输出,c,word-count,line-count,C,Word Count,Line Count,我创建这个程序是为了计算字数和行数,但是当我输入一个只有\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 f

我创建这个程序是为了计算字数和行数,但是当我输入一个只有
\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;
}
#包括
int main()
{
文件*文件;
字符字[1000];
INTC;
int NumLines=0;
int NumWords=0;
int为_空间=1;
printf(“输入文件名:”);
scanf(“%s”,单词);
file=fopen(字“r”);
而((c=fgetc(文件))!=EOF){
如果(c=='\n'){
NumLines++;
if(was_space==0){
NumWords++;
was_空间=1;
}
was_空间=1;
}
else if((c='\t'| c='-'| c=':'| c='='')和&was|u空间==0){
NumWords++;
was_空间=1;
}
否则如果(c!='\n'&&c!='\t'&&c!='-'&&c!=':'&&c!='){
was_space=0;
继续;
}
else if(was_space==1)
继续;
}
printf(“%d%9d\n”,NumLines,NumWords);
fclose(文件);
返回;
}

这是一个只输出一个'\n'字符的程序

#include <stdio.h>

int main() { printf("\n"); return 0; }
看起来您的测试输入文件实际上包含的字符比您想象的要多。在Windows平台上,文本行通常以字符序列“\r\n”而不是仅以“\n”结尾。在这种输入上,您的程序将打印:

john-schultzs-macbook-pro:~ jschultz$ ./a.out
Enter file name: input.txt
1         1

您确定文件中没有两个
\n
?调试告诉您什么?调试的一般提示:确保程序得到的和您认为它得到的是相同的。一个简单的printf(“%c”,c);在循环的顶部,将显示程序作为输入所获得的内容。在第二个
中,如果
if
,您知道
ch
不能是
'\n'
。您应该从
fopen()
检查返回值时出错;人们经常拼错文件名。包括计数
char
读取和打印的数量
while((c=fgetc(file))!=EOF){count++;
怀疑将大于1。
john-schultzs-macbook-pro:~ jschultz$ ./a.out
Enter file name: input.txt
1         1