【问题标题】:Copying file text in C using getc() and putc() - binary code in the output file [closed]使用 getc() 和 putc() 在 C 中复制文件文本 - 输出文件中的二进制代码 [关闭]
【发布时间】:2018-05-29 00:16:42
【问题描述】:

我创建了一个名为“text.txt”的文件,其中包含一个字符串,我想将该字符串复制到另一个名为“copiaqui.txt”的文件中。但是有一个问题。在输出文件中,我发现了这个:

为什么程序没有正确复制字符串?

代码:

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

void copiaFile(FILE *fi, FILE *fo);

int  main(void)
{
    FILE *fi = fopen("test.txt", "r");
    FILE *fo = fopen("copiaqui.txt","w");   

    if (fi == NULL)
    {
        printf("\nImpossibile aprire il file test.txt\n");
        exit(EXIT_FAILURE);
    } 

    if (fo == NULL)
    {
        printf("\nImpossibile aprire il file copiaqui.txt\n");  
        exit(EXIT_FAILURE);
    }

    copiaFile(fi, fo);

    fclose(fi);
    fclose(fo);
    return 0;
}

void copiaFile(FILE *fi, FILE *fo)
{
    int var;

    while((var = getc(fi) != EOF))
    {
        printf("\nCarattere acquisisto : %c", var);
        putc(var, fo);
    }


}

【问题讨论】:

  • 括号和优先规则:你有while ((var = getc(fi) != EOF));你需要的是while ((var = getc(fi)) != EOF)
  • 这就是问题所在。谢谢你!
  • 注意:使用int var;而不是char var;的代码很好。

标签: c file output getc


【解决方案1】:

你对这个表达式犯了一个常见的错误:

var = getc(fi) != EOF

它的作用是将(getc(fi) != EOF) 的值分配给var,因为有一种叫做运算符优先级的东西。该值为真或假。你打算做的是:

(var = getc(fi)) != EOF

这将使var 具有getc() 值,然后对照EOF 进行检查。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 2011-11-25
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多