这是我的问题。输出文件是七行,如下所示:
Dinda
Jane
is
so
beautiful
and
handsome.
我们被要求读取输出文件有多少行。但是两行应该只计数1.因此,该程序中的确切行数应为4(包括最后一行)。我怎么一次读两行?这是我到目前为止所得到的。
#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();
}
}
答案 0 :(得分: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;
}
答案 1 :(得分:1)
有很多可能的解决方案。从字面上看“一次读两行”,你会得到
char c[256];
while(fgets (c, sizeof(c), fp)))
{
a++;
if (!fgets(c,sizeof(c),fp))
break;
}
读取单行,递增行计数器,然后读取另一行,而不用递增计数器。即使最后一行没有以返回结束(在您的规范中缺失,但根据WhozCraig的观察结果),它也能正常工作。
它可以处理长达254个字符的单行(不包括终止\n
)。您可以调整代码以允许更长的行:将两个fgets
命令放在循环中,如果最后读取的字符是\n
(或fgets
返回{{},则将其中断1}}表示文件结束或错误。)
答案 2 :(得分: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)
答案 3 :(得分: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部分尝试此代码..
一次获取一个字符并比较是否为换行符。如果它是一个换行符,它会递增一个标志变量。最后遍历了文件中的所有字符。它会使旗帜值减半。就像你想要它..