在 C 的 VS2008 中使用 .txt

Working with .txt in VS2008 in C

我写了一些程序来覆盖 .txt 文件中的一些文本并将覆盖的文本放入另一个文件中 output.txt...但是它总是说文件无法打开。我该怎么办?

#include <stdio.h>
#include <ctype.h>

int main()
{
 FILE *ul=fopen("hexbr.txt","r"),*iz=fopen("bitovi.txt","w");
 int i;
 char ch;

 if ((!ul)||(!iz)) { printf("Neuspesno otvaranje datoteke!");return 0; }
 while((ch=fgetc(ul))!=EOF)
  {
   if ((isdigit(ch)) || (c>='A' && c<='F'))
    {
     if (isalpha(ch))
       switch(ch)
       {
         case 'A': { fputc('1',iz);fputc('0',iz);fputc('1',iz);fputc('0',iz);continue; }
         case 'B': { fputc('1',iz);fputc('0',iz);fputc('1',iz);fputc('1',iz);continue; }
         case 'C': { fputc('1',iz);fputc('1',iz);fputc('0',iz);fputc('0',iz);continue; }
         case 'D': { fputc('1',iz);fputc('1',iz);fputc('0',iz);fputc('1',iz);continue; }
         case 'E': { fputc('1',iz);fputc('1',iz);fputc('1',iz);fputc('0',iz);continue; }
         case 'F': { fputc('1',iz);fputc('1',iz);fputc('1',iz);fputc('1',iz);continue; }
       }
     for(i=0;i<4;i++)
      {
       fputc((ch & 0X8)?'1':'0',iz);
       ch<<=1;
      }
    }
   else fputc(ch,iz);
   if (ch=='\n') { ch=fgetc(ul);fputc(ch,iz); }
  }
 fclose(ul);
 fclose(iz);
 return 0;
}

程序没有编译成功,这里有一对错别字,c应该是ch:

... (c>='A' && c<='F') ...

除此之外,程序 几乎 可以运行,并且输出文件(与可执行文件在同一文件夹中创建)是可读的。

尝试处理 newline 个字符时出错,错误地导致下一个(打印)字符被传递而不是转换为二进制。我让 newlinereturn 像其他非十六进制字符一样通过。

除此之外,A..F 的处理很笨拙。我建议像这样诱捕他们:

while((ch=fgetc(ul))!=EOF)
{
    if ((isdigit(ch)) || (ch>='A' && ch<='F'))
    {
        if (isalpha(ch))
            ch -= 7;
        for(i=0;i<4;i++)
            {
            fputc((ch & 0X8)?'1':'0',iz);
            ch<<=1;
            }
    }
    else fputc(ch,iz);
}

您可能还想检查并转换小写 a..f