c - 从文件中读取字符

标签 c file fgetc

我想知道为什么我的程序得到错误的结果。我只需要从文件中读取字符,包括空格、(.)、(、) 等,并以特定的字符串格式输出它们。 结果我得到了超过 300 个 char read 实例及其奇怪的表示形式。我需要打印实际的字符及其内存位置。欣赏它!

 34 instances of character :
 35 instances of character ¼
 36 instances of character ¼
 37 instances of character ¼

  #include <stdio.h>

  int main()
  {
   char ch;
   int characters[100];
   int i,j,k;
   int charCount = 0;

   FILE *fPtr;
   fPtr=fopen("input.txt", "r");

   while(ch = fgetc(fPtr) != EOF)
   {
     i=0;
     characters[i] = (char)ch;
     i++;
   }

   int arrayLength = sizeof(characters)/sizeof(characters[0]);

   for(j= 0; j < arrayLength; j++)
   {
     for(k=1; k < arrayLength; k++)
     {
       if(characters[j] == characters[k])
   {
      charCount++;
          printf("%d instances of character %c in location %c \n", charCount, characters[j], &characters[j]);
   }
     }
   }
 }

最佳答案

请记住这一点:fgetch() 返回 int。不是char。请参阅man page .

这是因为 EOF 常量比字符大,因此返回值中必须有更多位才能表示“任何字符,或 EOF” >”。

换句话说,EOF不是一个字符,它是out-of-band的一个例子通讯。

另外,你的括号看起来很奇怪,你的意思可能是:

while((ch = fgetc(fPtr)) != EOF && ch != '\n')

仅注意赋值周围的内括号。

关于c - 从文件中读取字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11346154/

相关文章:

c - 为什么我的内循环只运行一次?

c# - 使用 DryWetMidi 从 MIDI 文件中读取每个音符(音符、力度、长度)

arrays - Valgrind错误-条件跳转或移动取决于未初始化的值

c - 简单的 C 程序不会返回数字的平方

c - .c 和 .h 文件扩展名对 C 意味着什么?

c - 如何一次将数组中的数字复制到二进制文件中?

c - 是否可以从同一头文件中的头文件调用函数? (C99)

c - fgetc() 没有像我希望的那样工作

c - 如何用C读取这些混合数据

c - C语言中如何过滤类似于 `int c = 1/0*0`的表达式?