-2

这是我的问题。输出文件有七行,如下所示:

Dinda
Jane
is
so
beautiful
and
handsome.

我们被要求读取输出文件有多少行。但是两行应该只算 1。所以,这个程序中的确切行数应该是四行(包括最后一行)。我应该如何一次阅读两行?这是我到目前为止得到的。

#include<stdio.h>
main()
{
    FILE *fp;
    char filename[25];
    char c[25][25];
    int a;

    clrscr();

    printf("Enter File Name: ");
    gets(filename);

    if(filename==NULL)
    {
        printf("\nERROR! File Doesn't Exist!");
    }
    else
    {
        fp=fopen(filename,"r");

        while(!feof(fp))
        {
            fgets(&c,sizeof(c),fp);
            printf("%s",c);
            if(strlen(c))
            {
                a++;
            }
        }

        printf("The Number of Words are: %d",a);
        fclose(fp);
        getch();
    }
}
4

4 回答 4

1

当你这样做时,为什么要让它变得困难(阅读 2 行):

#include<stdio.h>
#include<string.h>
main()
{
    FILE *fp;
    char filename[25];
    char buffer[256];
    int buffer_size = sizeof(buffer);
    int a=0;

    printf("Enter File Name: ");
    fgets(filename,sizeof(filename),stdin); //Always use fgets
    filename[strlen(filename)-1]='\0'; //Remove \n from the filename

    fp=fopen(filename,"r"); 
    if(fp==NULL) //Check if file pointer is NULL then return
    {
        printf("\nERROR! File Doesn't Exist!");
        return;
    }

    while (fgets(buffer, buffer_size, fp)) //Count number of lines in file
    {
        a++;
    }

    fclose(fp);

    //If number of lines are even then just divide by 2 else divide by 2 and add one
    if (a % 2 == 0) 
        a = (a / 2); 
    else        
        a = (a / 2) + 1;

    printf("The Number of lines are: %d",a);
    return 0;
}
于 2014-09-07T10:14:43.650 回答
1

有很多可能的解决方案。从字面上看“一次读两行”,你会得到

char c[256];
while(fgets (c, sizeof(c), fp)))
{
   a++;
   if (!fgets(c,sizeof(c),fp))
       break;
}

它读取一行,增加行计数器,然后读取另一行而不增加计数器。即使最后一行没有以返回结尾(在您的规范中缺失,但根据 WhozCraig 的观察),它也会正常工作。

它可以处理长达 254 个字符的单行(不包括终止符\n)。您可以调整代码以允许比这更长的行:将两个fgets命令放在一个循环中,如果最后读取的字符是一个\n(或fgets返回0以指示文件结束或错误),则将其中断。

于 2014-09-07T11:51:32.630 回答
0

尝试这样的事情:

char c = getc(fp);
while (c != EOF) {
    if (c == '\n') a++:
    c = getc(fp);
}

 printf("Number of line is %d", (a + 1)/2); // (the +1 is for the last line)
于 2014-09-07T10:00:08.287 回答
0
fp = fopen(filename,"r");
int flag = 0
ch = getc(fp)
while( ch != EOF)
{
    if( ch == '\n')
    {
        flag++;
    }
    ch = getc(fp);
}
flag = (flag+1)/2;

在代码的 else 部分尝试此代码..

它一次获取一个字符并比较它是否是换行符。如果它是一个换行符,它会增加一个标志变量。最后在文件中的所有字符都被遍历之后。它将使标志值减半。就像你想要的一样。。

于 2014-09-07T10:01:28.633 回答