簡體   English   中英

如何獲得每一行的字符數?

[英]How do I get number of characters in each line?

我需要獲取每一行中的字符數,然后將其粘貼到另一個文件(學校項目)中,但是甚至我的原型也無法正常工作。

我已經嘗試繼續查看問題,將其粘貼到另一個文件中后是否可以解決,但是它沒有用,所以我回到了這一點。

int main()
{
    FILE *fw;
    FILE *fr;
    int i = 0;
    char c;
    fr = fopen("vstup.txt","r");
    fw = fopen("vystup.txt","w");
    while ((c = getc(fr)) != EOF)
    {
        while ((c = getc(fr)) != '\n')
        {
            i++;
        }
        printf("%d\n", i);
    }
}

必須將c聲明為int ,而不是char EOF可能不是有效的char值,因此不等式可能永遠成功。

您不應兩次調用getc() 您永遠不會檢查第一個調用的結果是否是換行符。

閱讀換行符后,需要將i設置為0 ,否則將繼續將下一行的長度添加到上一行。

僅在讀取換行符時才打印長度,而不是每次循環時都打印長度。 而且如果最后一行不是以換行符結尾,則應在循環之后打印其長度; 如果i完成時i不為0 ,就可以知道發生了這種情況。

由於應將長度寫入另一個文件,因此應使用fprintf()

while ((c=getc(fr)) != EOF) {
    if (c == '\n') {
        printf("%d\n", i);
        i = 0;
    } else {
        i++;
    }
}
if (i != 0) {
    fprintf(fw, "%d\n", i);
}

您不需要嵌套循環。 您需要以任何一種方式將計數器歸零,因此您最好只使用if而不是一會兒:

int main()
{
    FILE *fw, *fr;
    int count = 0;
    int c;

    fr = fopen("vstup.txt","r");
    fw = fopen("vystup.txt","w");

    while ((c = getc(fr)) != EOF) {
        count++;
        if(c == '\n') {
            fprintf(fw, "%d\n", count);
            count = 0;
        }
    }

    fclose(fr);
    fclose(fw);
}

此版本會將換行符視為有效字符。

請注意, c必須是int ,而不是char ,以便它可以容納getc返回的每個字符值以及EOF ,而不是字符值。

並且不要忘記關閉文件!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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