我编写这个程序是为了接受一个文件并扫描文件中的行数、段落数和单词数。
问题是,它永远不会停止扫描它永远不会突然出现(nextChar!='\n')循环因此processBlank和copyText函数永远不会停止运行它从来没有击中过EOF。
我不确定如何继续我不知道该怎么解决,所以任何帮助都是值得感谢的:)
#include <stdio.h>
#include <stdlib.h>
void initialize(int *p1,int *p2,int *p3,int *p4)
{
*p1=0;
*p2=0;
*p3=0;
*p4=0;
}
void processBlank(char *nextChar,int *wordsinLine,FILE *ctPtr)
{
while (*nextChar==' ')
{
printf("%c",*nextChar);
*nextChar=fgetc(ctPtr);
}
*wordsinLine+=1;
}
void copyText(char *nextChar,FILE *ctPtr)
{
while (*nextChar!=' ')
{
printf("%c",*nextChar);
*nextChar=fgetc(ctPtr);
}
}
void updateCount(int *numWords,int *wordsinLine,int *numParagraphs,int *numLines)
{
*numWords+=*wordsinLine;
if (*wordsinLine==0)
*numParagraphs+=1;
*wordsinLine=0;
*numLines+=1;
}
void printTotal(int numWords,int numLines,int numParagraphs)
{
printf("\n\n\n\nTotal number of words is: %d\n\n",numWords);
printf("Total number of lines is: %d\n\n",numLines);
printf("Total number of paragraphs is: %d\n\n\n\n",numParagraphs);
}
void main()
{
int numWords,numLines,numParagraphs,wordsinLine;
initialize(&numWords,&numLines,&numParagraphs,&wordsinLine);
FILE *ctPtr;
char nextChar;
if ((ctPtr=fopen("Q2read.txt", "r"))==NULL)
printf("File could not be opened\n");
else
{
nextChar=fgetc(ctPtr);
while (nextChar!=feof(ctPtr))
{
while (nextChar!='\n')
{
processBlank(&nextChar,&wordsinLine,ctPtr);
copyText(&nextChar,ctPtr);
}
updateCount(&numWords,&wordsinLine,&numParagraphs,&numLines);
}
printTotal(numWords,numLines,numParagraphs);
fclose(ctPtr);
}
}
最佳答案
专业:将nextChar!=feof(ctPtr)
改为nextChar != EOF
。feof()
return“非零如果且仅当文件结束指示符是
设置“EOF
是一个负数。
两个不同的东西-不太可比。
次要:将void main()
更改为int main(void)
将char nextChar
更改为int nextChar
(也包括相关的函数调用)
专业:copyText()
:更改为while (*nextChar != ' ' && *nextChar != EOF) {
在main()
更改为while (nextChar != '\n' && nextChar != EOF) {
添加EOF测试。