簡體   English   中英

使用c的文件中的行數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM