【问题标题】:C reading from fileC从文件中读取
【发布时间】:2016-08-02 21:01:18
【问题描述】:

我正在尝试编写一个读取文件并从中打印字符的代码。如果字符不可读,它应该打印?。如果文件有错误,代码返回-1,否则返回读取的字符数量。不知何故,这无法正常工作,因为我无法编译它。

int printfile(const char *filename)
{
    FILE *f = fopen(filename, "r");
    int  i, c;
    char k = "?";

    while ((i = fgetc(f)) != EOF ) {
        c++;
        if(isprint(i)){
            printf("%c ", i);
        }
        else if (ferror(f)) return -1;
        else {
            printf("%c", k);
        }
    }
    return c;
}

我应该为此保留一些空间还是让它工作,或者代码是错误的。

【问题讨论】:

  • 在什么情况下不能正常工作?
  • “不知怎的,这不能正常工作”不是有用的错误描述。输入、预期输出、观察到的输出。那是调试 101,真的。此外,您的示例代码应该编译成一个程序,即有一个int main() 和所有必要的包含。
  • 首先,你不初始化c。它开始的值是不确定的。其次,您不要使用fclose() 关闭文件。第三,您永远不会检查原始fopen() 是否成功。
  • 你的printf("%c ", i); 打印一个额外的空间;这是故意的吗?此外,对于stdout 的单个字符,您可以使用putchar( i );,这样更有效。 char k = "?"; 坏了; "?"char [] 类型,有两个元素 '?''\0'。您正在将数组的地址分配给char...
  • "...因为我无法编译它。" - 严重地? 真的吗?这是你的编辑?编译器可能告诉您,FILE(缺少#include <stdio.h>)、isprint() 的隐式声明(缺少#include <ctype.h>)和缺少main() 没有意义。但甚至不包括实际的编译器错误消息只是 LAZY。

标签: c file printing


【解决方案1】:

这是我将如何实现 PrintFile 的示例,希望对您有所帮助。

#include <stdio.h>

int PrintFile(const char *filename);

int PrintFile(const char *filename)
{
    FILE *file = fopen(filename, "r");

    if (file == NULL)
    {
        return -1;
    }

    int c = 0;
    int i = 0;

    while ((c = fgetc(file)) != EOF)
    {
        if (isprint(c))
        {
            fputc(c, stdout);
            i++;
        }
        else
        {
            fputc('?', stdout);
        }
    }

    if (ferror(file))
    {
        return -2;
    }

    return i;
}

【讨论】:

    猜你喜欢
    • 2014-04-02
    • 2012-05-15
    • 2016-06-18
    • 2020-11-28
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多