C中的行计数但排除空行

时间:2017-03-28 08:36:50

标签: c

我有以下程序,但是有问题。首先是不起作用的程序部分:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    FILE *fp;
    FILE *fp2;
    char ch;
    char fnamer[100];
    char fnamer2[100];  //Storing File Path/Name of Image to Display
    printf("\n\nPlease Enter the Full Path of the Image file you want to view: \n");
    scanf("%s",&fnamer);
    fp=fopen(fnamer,"r");
    if(fp==NULL)
    {
        printf("Error!");
        exit(1);
    }
    printf("\n\nPlease Enter the Full Path of the Image file you want to write to: \n");
    scanf("%s",&fnamer2);
    fp2=fopen(fnamer2,"w");
    if(fp2==NULL)
    {
        printf("Error!");
        exit(1);
    }
    else
    {
        // printf("test\n");
    }



    int line_number = 0;
    int charsOnLine = 0;

    fprintf(fp2, "%d: ", ++line_number);  /* put line number in output file */
    printf("%d: ", line_number);


    while((ch = fgetc(fp)) != EOF )
    {
        //printf("test2");
        fputc(ch,fp2);
        printf("%c", ch);
        if ( ch != '\n' && charsOnLine ==0 )
        {
            fprintf(fp2, "%d:", ++line_number );  /* put line number in output file */
            printf("%d: ", line_number);
        }
        //        if (ch != '\n' && charsOnLine 0 ){
        //          fprintf(fp2, "%c", ch);
        //        printf("%d", ch);
        //  }
    }

    fclose;
    fclose(fp);
    // fclose(fp2);
    // getch();
}

程序需要计算行数,给它们一个数字但跳过空行。但问题在于:当我运行此代码时,它会为所有字符提供一个数字。

2 个答案:

答案 0 :(得分:0)

据我所知,该程序需要计算行数并附加其内容。 然后我会搜索'\n' char,而不是用if (ch != '\n')

跳过它
int main()
{
    FILE *fp;
    FILE *fp2;
    char ch;
    char fnamer[100];
    char fnamer2[100];  //Storing File Path/Name of Image to Display
    printf("\n\nPlease Enter the Full Path of the Image file you want to view: \n");
    scanf("%s",&fnamer);
    fp=fopen(fnamer,"r");
    if(fp==NULL)
    {
        printf("Error!");
        exit(1);
    }
    printf("\n\nPlease Enter the Full Path of the Image file you want to write to: \n");
    scanf("%s",&fnamer2);
    fp2=fopen(fnamer2,"w");
    if(fp2==NULL)
    {
        printf("Error!");
        exit(1);
    }


    int line_number = 0;
    fprintf(fp2, "%d: ", ++line_number );

    while((ch = fgetc(fp)) != EOF )
    {
        if ( ch == '\n' )
        {
            fprintf(fp2, "%d: ", ++line_number );  /* put line number in output file */
        }
        else {
            fputc(ch,fp2); /* put the char in the corresponding line */
        }
    }

    fclose(fp);
    fclose(fp2);
}

答案 1 :(得分:0)

您刚刚开始新线时可以使用标记来记住。第一次看到char不等于'\n'时,打印行号并清除标记。

类似的东西:

int line_number = 0;
int newLine = 1;

while((ch = fgetc(fp)) != EOF )
{
    if (ch == '\n')
    {
        newLine = 1;
    }
    else
    {
        if (newLine)
        {
            fprintf(fp2, "%d:", ++line_number );
            printf("%d: ", line_number);
            newLine = 0;
        }
    }
    fputc(ch,fp2);
    printf("%c", ch);
}