关于C语言文件操作的问题,求大神详解,悬赏30分……

我想C语言文件保存时保存成如下图那种形式,该怎样写代码呢?还有怎样将一行信息读取到程序中对应相应变量啊……比如读取时怎样让B对应读取到category,让张山对应读取到变量Name,以此类推……

答案详细加20分,谢谢大神……坐等啊
也就是怎样写代码能将结构体内容以上图形式逐条放进文档啊……加分……

/* 写入文件 */
fprintf(pf, "%-10s %-10s %-10s %-10s %-10s %-10s %-10s\n", class, name, id, age, dept, lab, paper); 
/* 读出会麻烦点 */ 
fscanf(pf, "%10s %10s %10s %10s %10s %10s %10s\n", class, name, id, age, dept, lab, paper);   
/* 这样的话,字段里不能有空格,否则会乱掉。如果一定要支持空格的话,只能一行一行处理了。 */

追问

关键我不知道里面的空格怎么办?还有一个疑问,他怎么换行的啊?我想问下,你知道用fread()函数怎样操作吗?不管怎样,分都给你……

追答

类似这种情况,用fgets更合适。char *fgets(char *s, int size, FILE *stream);

读一行处理一行,对于空格的话,貌似只能加特殊字符用作检测标记,比如每个字段后面加一个',',然后处理的时候检测这个标记按顺序读出来就好了。

sample:

/* 如果输出的时候这样做 */
fprintf(pf, "%-10s , %-10s , %-10s , %-10s , %-10s , %-10s , %-10s ,\n");
 
/* 那可以这样读出来,有一个问题就是字段里不能有',' */   
while (!feof(pf)) {
   memset(buf, 0, buflen); 
   fgets(buf, buflen, pf);
   char * p, * str = buf;
   int i = 0; 
   char * var[7] = {NULL}; 
   for (i=0; i<7, str != NULL; i++) {
      p = strchr(str, ',');
      if (p == NULL) break;
      *p = 0; 
      p++;
      var[i] = strdup(str); /* 这里会有空格,不想要就处理掉 */
      str = p;  
   }
   if (var[7] != NULL) { 
      /* 保存到相应的地方 */
   } 
   for (i=0;i<7; i++) if (var[i]) free(var[i]);      
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-08-21

第一排完全没必要。只要你程序读的顺序是对的就行了。

至于文件操作。简单来说就是

    打开文件    用fopen

    从文件流中读出数据  用fscanf fprintf

    而且你这应该弄个结构。一个人的信息就用一个结构变量表示。

    对于打印成表,可以用\t来代替空格。至于读的最后用EOF来表示读到文件末尾了。

    即fscanf返回值位EOF

    用法自己去百度或者看书,这很基础的。

追问

恩,是的,我是用的结构体,但是怎样将结构体逐条保存成这样样子啊,能 上点代码吗?启发一下啊,大神好人……

相似回答