如何获得每一行的字符数?

时间:2019-05-23 21:38:02

标签: c file

我需要获取每行中的字符数,然后将其粘贴到另一个文件(学校项目)中,但是甚至我的原型也已经无法正常工作。

我已经尝试继续查看问题,将其粘贴到另一个文件中后是否可以解决,但是它没有用,所以我回到了这一点。

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);
    }
}

2 个答案:

答案 0 :(得分:2)

c必须声明为int,而不是charEOF可能不是有效的char值,因此不等式可能永远成功。

您不应两次致电getc()。您永远不会检查第一次调用的结果,看看它是否是换行符。

读取换行符后,您需要将i设置回0,否则,您将继续将下一行的长度添加到上一行。

您应该仅在读取换行符时打印长度,而不是每次循环时都打印长度。而且如果最后一行不是以换行符结尾,则应在循环之后打印其长度;完成后,如果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);
}

答案 1 :(得分:1)

您不需要嵌套循环。您需要以任何一种方式将计数器归零,因此您最好只使用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,以便它可以容纳getcEOF返回的每个字符值,这不是字符值。

别忘了关闭文件!