2017-10-18 225 views
-1

我试图将一些数据输入到文件中,然后在控制台上读取并打印它。文件输出不正确

这里是我的代码:

fp=fopen("user1","w+"); 
    char line[1000]; 
    char *c; 
    //write on file 

    while(1) 
    { 
     fgets(line,sizeof(line),stdin); 
     if(strcmp(line,":wq\n")==0) //input ends when user enters :wq 
      break; 
     else 
      fputs(line,fp); 
    } 
    //read from file 
    fflush(stdin); 

    while(1) 
    { 
     c=fgetc(fp); 
     if(c==EOF) 
      break; 
     else 
      printf("%ch",c); 
    } 

我输入的数据作为

bjsa

:WQ

输出:

h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h 

是什么问题?

+0

我想你的意思'的printf(“%C” ,c)',这就是为什么你会在输出中获得很多h的原因。 – Milack27

+0

第一个问题是您没有发布完整的代码。不要让我们猜你是否想要一个好的答案。 –

+0

我发布了与上述问题相关的代码部分。发布完整的代码只会分散注意力,从实际问题中分散注意力,并将问题搞乱。 –

回答

1

我看到两个问题

1)您fgetc分配给一个char点。那是错的。它应是一个int

2)写入文件后,你应该关闭它,然后打开它读取

喜欢的东西:

fp=fopen("user1","w+"); 
    char line[1000]; 
    int c;    // notice ...... 

    //write on file  
    while(1) 
    { 
     fgets(line,sizeof(line),stdin); 
     if(strcmp(line,":wq\n")==0) //input ends when user enters :wq 
      break; 
     fputs(line,fp); 
    } 
    fclose(fp); 


    //read from file 
    fp=fopen("user1","r"); 
    while(1) 
    { 
     c=fgetc(fp); 
     if(c==EOF) 
      break; 
     printf("%ch",c); 
    } 
    fclose(fp); 
+0

您必须检查'fgets()'的返回值。你应该避免无限循环;在第一个循环条件中测试'fgets()',并在第二个循环中分配和比较结果。 –

+0

关闭和打开文件帮助。我忘记了写入文件将指针向下移动到最后写入位置。这解释了为什么我得到这么多'h'。 –

+0

你能告诉你为什么在c中使用int类型吗? –