[英]Number of lines in a file using c
我剛接觸CI中的文件處理正在開發一個程序,用於計算c中的行數和字符數。該程序對字符工作正常,但對於行,o / p總是少一個。我使用了新行字符算不了。 of lines.Here是我的代碼:
main()
{
FILE *fp;
int c,nl=0,nc=0;
char str[20];
printf("Enter filename\n");
scanf("%s",str);
fp=fopen(str,"r");
if(fp==NULL)
{
while(1)
{
printf("File does not exist\n");
printf("Enter new filename\n");
scanf("%s",str);
fp=fopen(str,"r");
if(fp!=NULL)
break;
}
}
c=getc(fp);
while(c!=EOF)
{
if(c=='\n')
nl++;
nc++;
c=getc(fp);
}
printf("no of lines=%d no of char=%d",nl,nc);
}
我的實現有什么問題?。還有其他方法來計算no。 線?
這取決於你對一條線的定義。 如果文件只包含單個字符'a',它是否有一行或沒有行? 按照程序的邏輯,它有零線。
您可以在while
循環結束時添加,在結束while
}
,此行:
if (c != '\n') nl++;
如果最后一個字符不是換行符,那將添加一個額外的行。 您還應該將c
初始化為零,否則如果文件為空,這將導致不可預測的結果。
從其他答案中可以看出,計算文件中的行數意味着什么並不完全清楚。 在開始編寫代碼之前,請確保您非常清楚地了解了您正在嘗試計算的內容。
任何文件的最后一行不需要以新行結束\\n
字符。 因此,您的程序將報告換行符的數量,而不是“行”的數量(這是一個傳統定義的概念)。
將帖子
最終結果將減少1,因為您將“\\ n”計為行尾,而最后一行不會將“\\ n”作為行尾。 它只會找不到任何角色。 (感謝你指出我的錯誤@Basile)
因此,對於正確的答案,只需增加while循環外的行數。
@DavidSchwartz認為這個答案不夠充分,並指出了明顯的答案。 因此,為了完整起見,我將添加:( David Schwartz在解決方案中繼續)。
最后一行不計入您的程序,因為它沒有遇到\\n
..
寫下也計算最后一行的邏輯..
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.