fgetc将错误的字符输出到控制台

时间:2019-08-13 13:04:28

标签: c file file-io char printf

我的程序应该打印包含在文本文件中的文本,该文本文件与源代码和可执行文件保存在同一目录中,然后打印行数。 但是,输出是一些随机字符。 我正在使用ubuntu。

跟进问题:哪个文件必须与文件位于同一目录(如果我未指定绝对路径),可执行文件或源代码? 预先感谢。

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

int main(){
  char c;
  int i = 0;

  FILE *fp = fopen("newfile","r"); 
  if(!fp) {
    printf("Error opening\n");
    return -1;
  }

  printf("Text of newfile: \n");
  while(fgetc(fp)!=EOF){
    c = fgetc(fp);
    printf("%c",c);

    if(c == '\n')
      ++i;
  }

  fclose(fp);
  fp = NULL;
  printf("\nThere are %d lines in the file\n",i+1);

  return 0;
}

该文件包含以下文本:

this is my file
this is line 2

输出:

Text of newfile: 
hsi yfl
hsi ie2�
There are 2 lines in the file

1 个答案:

答案 0 :(得分:4)

对于初学者,您在循环中两次使用fgetc

  while(fgetc(fp)!=EOF){
        ^^^^^^^^^ 
    c = fgetc(fp);
        ^^^^^^^^^
    //...  

第二,必须将变量c声明为类型int

循环可以如下所示

int c;

//...

while ( ( c = fgetc( fp ) ) != EOF )
{
    putchar( c );
    if ( c == '\n' ) ++i;
}