使用C读取文件中的字符并进行比较以检查它是否为星号

时间:2015-10-12 19:55:50

标签: c strcmp

我正在努力学习C,但我遇到了一些愚蠢的事情。在这种情况下,我想要实现的是创建一个管理手机联系人的程序。 “工具”允许插入联系人或删除并搜索联系人。它在C中使用二进制文件,我配置了代码,因此它可以使用记录和可变长度的字段。在这种情况下,我的记录采用以下格式(有一个标题指向最后删除的记录):

record_length|name|phone|

我目前的要求是,当我选择删除记录时,我将用以下内容覆盖记录内容:

record_length * next_record*

此令牌*标识记录状态已删除。在此之前,我对该程序感到满意。问题是程序的最后一个功能,即compress file。    我想添加一个函数,它将读取整个文件并将 VALID 记录复制到一个新文件中,删除任何未使用的空间(例如,如果我删除长度为20或更晚的记录,或者如果我用一个长度为10的新记录覆盖记录,该过程将保留文件中的最后10个垃圾字符。    该功能实际上非常简单,基本思路是:

  • 转到我的文件的开头并阅读标题以将其存储在临时变量
  • fread来自sizeof(int)的文件,以获取记录长度,直到fread返回NULL(文件结束)
  • fread一个字符

    • if this char == *,我想跳过记录并转到下一个
    • else,返回文件中的1个位置,并将记录的有效字符复制到新文件中。

    现在出现了一个愚蠢的问题:如何验证字符是否为星号?我很沮丧,因为我能够实现整个代码,我唯一缺少的就是这个实现。这是我想要做的:

    #define MAX_REGI_SZ 70
    int main (void) {
      char registro[MAX_REGI_SZ];
      ...
      ...
      ...
      fread(registro,sizeof(char),1,in);                   
      if (strcmp(registro,"\*")) {                         
         /* move to the next record */
      }                                                    
      else {
        /* valid record, copy it over to the new file */
      }                        
    ...
    }
    

    我已尝试与"*"进行比较,尝试声明一个char令牌然后make token = "*"然后在strcmp中使用令牌,尝试直接比较registro == "*" ,这根本不可能实现。我已经试图找到解决方案好几天没有找到任何地方,所以我放弃并在这里问C的主人。

1 个答案:

答案 0 :(得分:1)

您是否尝试过使用fgetc()

#define MAX_REGI_SZ 70

int main (void) 
{
   char registro[MAX_REGI_SZ];
   ...
   ...
   ...
   registro[index]=fgetc(/*Your file pointer*/)                 
   if (registro[index] == '*') // or if (registro[index] == 42)
   {                         
       /* move to the next record */
   }                                                    
   else 
   {
     /* valid record, copy it over to the new file */
   }                        
   ...
  }

注意代替if(registro[index] == '*',您也可以使用if(registro[index] == 42)将其与角色的ASCII值进行比较。ASCII Values Link