从文件中读取一行并打印出来

时间:2015-02-19 14:31:47

标签: c

#include "stdio.h" 

main( ) { 
    FILE *fp1; 
    char oneword[100]; 
    char *c;       

    fp1 = fopen("TENLINES.TXT","r"); 
    do { 
        c = fgets(oneword, 100 ,fp1); /* get one line from the file */ 
        if (c != NULL) 
        printf("%s", oneword); /* display it on the monitor */ 
    }  while (c != NULL); /* repeat until NULL */ 

    fclose(fp1); 
} 

我不明白为什么这段代码需要有一个char * c。 char * c在这里做了什么。我试图将所有'c'更改为'oneword',但它总会出错。你能解释一下吗? 感谢。

4 个答案:

答案 0 :(得分:2)

您是否阅读了fgets(3)的文档?它会在失败时返回NULL(例如,当您到达文件末尾时)。

当然,你应该检查fopen(3)的失败,如:

fp1 = fopen("TENLINES.TXT","r"); 
if (!fp1) 
  { perror("fopen TENLINES.TXT failure"); exit(EXIT_FAILURE); };

然后编译所有警告&调试信息(例如gcc -Wall -Wextra -g)并了解如何使用调试器gdb

答案 1 :(得分:1)

fgets()返回一个指针。你想在哪里存放它?应该为此目的定义一个指针。这就是宣布char *c的原因。此外,您不能使用oneword,这已经用于存储从文件中读取的行。

答案 2 :(得分:1)

[评论太久了]

使用while循环代替do循环可以让你在不定义c的情况下四处走动:

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

int main(void) 
{ 
  int result = EXIT_SUCCESS; /* Be optimistic! */

  FILE * fp1 = fopen("TENLINES.TXT", "r"); 
  if (NULL == fp1)
  {
    result = EXIT_FAILURE; 
    perror("fopen() failed");
  }
  else
  {
    char oneline_if_shorter_then_100_characters[100]; 
    while (NULL != fgets(oneline_if_shorter_then_100_characters, sizeof oneline_if_shorter_then_100_characters, fp1)) /* get one line from the file */ 
    {
      printf("%s", oneline_if_shorter_then_100_characters); /* display it on the monitor */ 
    } /* repeat until fgets had returned NULL */ 

    fclose(fp1); 
  }

  return result;
}

答案 3 :(得分:0)

使用fgetc()

处理您的需求的更安全的方法
#include <stdio.h>

int main() { 
FILE *fp1; 
char oneword[100]; 
int c;

int i=0;

if((fp1 = fopen("Newfile.x","r")) <= 0){
    return 1; // File opening failled
}  

  while((c=fgetc(fp1))!=EOF){
      oneword[i]=c;
      i++;

      if(i>=99 || c=='\n'){
            // We are out of buffer OR new line reached
            oneword[i]='\0';
            printf("%s \n",oneword);
            i=0;
      }
   }

    // If some left ; output that too
    oneword[i]='\0';
    printf("%s \n",oneword);

  return 1;
}