user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<ReadSentence>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x88,%rsp
  mov    %rdi,%r14
  mov    %rdi,0x8(%rsp)
  mov    %rsi,%r15
  mov    %rdx,(%rsp)
  mov    %rcx,%rbx
  mov    %fs:0x28,%rax
  mov    %rax,0x78(%rsp)
  xor    %eax,%eax
  lea    0x10(%rsp),%rdi
  mov    %rcx,%rsi
  call   <ReadWord@plt>
  mov    %rbx,%rdi
  call   <feof@plt>
  mov    $0x0,%ebp
  test   %rax,%rax
  je     L108
L139:
  mov    0x78(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L162
  mov    %ebp,%eax
  add    $0x88,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L108:
  lea    0x10(%rsp),%rdi
  call   <SearchCategory@plt>
  mov    %eax,(%r14)
  mov    $0x0,%r13d
  lea    0x10(%rsp),%r14
  jmp    L90
L182:
  movslq %r13d,%rdx
  mov    %eax,(%r15,%rdx,4)
  add    $0x1,%r13d
L192:
  sub    $0x9,%r12d
  cmp    $0x1,%r12d
  jbe    L82
L90:
  mov    %rbx,%rsi
  mov    %r14,%rdi
  call   <ReadWord@plt>
  mov    %eax,%r12d
  mov    %rbx,%rdi
  call   <feof@plt>
  test   %rax,%rax
  jne    L49
  add    $0x1,%ebp
  mov    %r14,%rdi
  call   <SearchVocab@plt>
  cmp    $0xffffffff,%eax
  je     L192
  cmp    $0x12b,%r13d
  jle    L182
  jmp    L192
L82:
  movslq %r13d,%rax
  movl   $0xffffffff,(%r15,%rax,4)
  test   %r13d,%r13d
  jne    L98
  mov    0x8(%rsp),%rax
  movl   $0xffffffff,(%rax)
L98:
  movl   $0x0,0x8(%rsp)
  lea    0x10(%rsp),%r14
L58:
  movslq 0x8(%rsp),%r15
  imul   $0x4b4,%r15,%r15
  add    (%rsp),%r15
  mov    $0x0,%r13d
  jmp    L25
L94:
  movslq %r13d,%rdx
  mov    %eax,(%r15,%rdx,4)
  add    $0x1,%r13d
L50:
  lea    -0x9(%r12),%eax
  cmp    $0x1,%eax
  jbe    L32
L25:
  mov    %rbx,%rsi
  mov    %r14,%rdi
  call   <ReadWord@plt>
  mov    %eax,%r12d
  mov    %rbx,%rdi
  call   <feof@plt>
  test   %rax,%rax
  jne    L46
  add    $0x1,%ebp
  mov    %r14,%rdi
  call   <SearchVocab@plt>
  cmp    $0xffffffff,%eax
  je     L50
  cmp    $0x12b,%r13d
  jle    L94
  jmp    L50
L32:
  movslq %r13d,%rax
  movl   $0xffffffff,(%r15,%rax,4)
  test   %r13d,%r13d
  je     L198
  mov    0x8(%rsp),%ecx
  cmp    $0x13,%ecx
  setle  %al
  cmp    $0x1,%al
  sbb    $0xffffffff,%ecx
  mov    %ecx,0x8(%rsp)
L198:
  cmp    $0xa,%r12d
  jne    L58
  movslq 0x8(%rsp),%rax
  imul   $0x4b4,%rax,%rax
  mov    (%rsp),%rcx
  movl   $0xffffffff,(%rcx,%rax,1)
  jmp    L139
L49:
  mov    $0x0,%ebp
  jmp    L139
L46:
  mov    $0x0,%ebp
  jmp    L139
L162:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
int ReadSentence(int *category, int *que, int ans[][300 + 1], FILE *fin) {
  char word[100];
  int a = 0, b = 0, c = 0, id = -1, ch;
  ReadWord(word, fin);
  if (feof(fin))
    return 0;
  c = SearchCategory(word);
  *category = c;
  c = 0;
  while (1) {
    ch = ReadWord(word, fin);
    if (feof(fin))
      return 0;
    a++;
    id = SearchVocab(word);
    if (id != -1 && c < 300) {
      que[c] = id;
      c++;
    }
    if (ch == '\t' || ch == '\n')
      break;
  }
  que[c] = -1;
  if (c == 0)
    *category = -1;
  b = 0;
  while (1) {
    c = 0;
    while (1) {
      ch = ReadWord(word, fin);
      if (feof(fin))
        return 0;
      a++;
      id = SearchVocab(word);
      if (id != -1 && c < 300) {
        ans[b][c] = id;
        c++;
      }
      if (ch == '\t' || ch == '\n')
        break;
    }
    ans[b][c] = -1;
    if (c != 0 && b < 20)
      b++;
    if (ch == '\n')
      break;
  }
  ans[b][0] = -1;
  return a;
}
```