我编写这个程序是为了接受一个文件并扫描文件中的行数、段落数和单词数。
问题是,它永远不会停止扫描它永远不会突然出现(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测试。

08-06 12:17