在C中逐个字符地逐行读取文件

时间:2015-10-14 15:34:09

标签: c file io

我在阅读C中的文件时遇到问题 我想逐行阅读文件 每行包含25个字符,每个字符都有一个特殊值,我必须在其他函数中使用。我的代码:

int read_file(const char* filename){

    FILE* file = fopen(filename, "r");
    char line[25];
    int i;
    int counter = 0;



    while (fgets(line, sizeof(line), file))
    {
        if (counter == 0)
        {
            counter++;
        }
        else
        {

                for(i = 0; i < 25 ; i++){
                     printf("%s",line[i]);
                }
        }
    }

    fclose(file);

    return 0;
}

我必须做一些其他事情然后打印它,但是当我尝试这个代码时,它会产生错误,所以做其他事情也会做同样的事情。 所以我的代码需要逐行读取文件然后我需要能够逐个字符地读取它。

2 个答案:

答案 0 :(得分:2)

  • 25个元素的数组不足以存储25个字符的行:+1表示换行符,+1表示终止空字符。
  • 您应该检查文件的打开是否成功
  • 必须使用
  • %c通过printf打印一个字符。

固定代码:

#include <stdio.h>

int read_file(const char* filename){

    FILE* file = fopen(filename, "r");
    char line[27]; /* an array of 25 elements isn't enough to store lines of 25 characters: +1 for newline and +1 for terminating null character */
    int i;
    int counter = 0;

    if (file == NULL) return 1; /* check if the file is successfully opened */

    while (fgets(line, sizeof(line), file))
    {
        if (counter == 0)
        {
            counter++;
        }
        else
        {

            for(i = 0; i < 25 ; i++){
                 printf("%c",line[i]); /* use %c instead of %s to print one character */
            }
        }
    }

    fclose(file);

    return 0;
}

答案 1 :(得分:1)

 printf("%s",line[i]);     // %s expects char * and line[i] is  a char 

这应该是 -

 printf("%c",line[i]);     // to print character by charcter 

要存储25个字符,请将line声明为 -

char line[25+1];  // +1 for null character

注意 - 正如您在%s的评论中所提出的那样可以用作 -

printf("%s",line);         // no loop required