计算文件中的行和字的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