簡體   English   中英

C編程-文件-fwrite

[英]C Programming - File - fwrite

我對編程和文件有疑問。

while(current!=NULL)
{
  if(current->Id_Doctor!='\0')
  {
    current=current->next;
    id_doc=(current->Id_Doctor);
  }
  if(current->Id_Doctor=='\0')
  {
    id_doc=id_doc+1;
    printf("%d", id_doc);
    break;
  }
}
fwrite(&id_doc, sizeof(char), 1, Archivo);

我不知道為什么,但是它沒有在名為“ Archivo”的二進制文件中寫入id_doc的值...可能是什么問題? 我添加了一個id_doc的printf,並且該值已打印..我真的不知道

好的,這是完整的代碼(更少):

struct Medico
{
  int Id_Doctor;
  int Estado;
  char Nombre[60];
  char Clave_Acceso[20];
  char Especialidad[40]; 
  struct Medico *next;
};
void Dar_Alta_Med (int estado);
void MenuPrincipal(char enta);
int main(void)
{
  char enta;
  MenuPrincipal(enta);
}
void Dar_Alta_Med(int estado)
{
  struct Medico * head = NULL;
  struct Medico * prev, *current;
  char nombre_doc[60], especialida[40], password[20];
  int id_doc=0, estado_doc=1;
  FILE *Archivo;
 const char *md1="\n<md>\n";
  const char *id_doc1="<id_doctor> ";
 Archivo=fopen("md.dat", "ab+");
  fwrite(md1, 1, strlen(md1), Archivo);
  fwrite(id_doc1, 1, strlen(id_doc1), Archivo);
  current = (struct Medico *) malloc (sizeof(struct Medico));
  current->Id_Doctor=id_doc; 
  while(current!=NULL)
    {
      if(current->Id_Doctor!='\0')
    {
      current=current->next;
      id_doc=(current->Id_Doctor);
    }
      else
    {
      id_doc=id_doc+1;
      printf("%d", id_doc);
      break;
    }
    }
  fwrite(&id_doc, sizeof(id_doc), 1, Archivo);
  printf("Ingresa el nombre del Doctor a dar de alta: ");
  fclose(Archivo);
}

我在這里快死了,請幫助:/

嘗試添加fflush(Archivo); 強制寫入所有緩沖的數據。

另外,該語句: if(current->Id_Doctor=='\\0')確實應該是else因為除了'\\0'它別無其他

三件事:

  • 確保打開成功。

     Archivo=fopen("md.dat", "ab+"); if (Archivo == NULL) { perror("Failed to open file Archivo"); ... } 
  • 確保您正在檢查fwrite的成功。

     if (fwrite(&id_doc, sizeof(id_doc), 1, Archivo) < 1) { perror("Failed to write to file Archivo"); ... } 
  • 確保已關閉文件以正確關閉文件。

     if (fclose(Archivo) != 0) { perror("Failed to close file Archivo"); ... } 

既然您已經發布了完整的代碼示例,我想我應該問是否只是為了簡潔而省去了錯誤檢查? 如果沒有,您應該考慮添加它。

如果期望id_doc的值在輸出文件中為顯示格式,則必須將int轉換為字符串(使用snprintf或類似方法),然后將字符串寫入輸出文件。

fwrite(&id_doc, sizeof(char), 1, Archivo); 

如果您將id_doc定義為除char之外的任何其他字符,它將在文件中寫入\\ 0。

更干凈的是:

fwrite(&id_doc, sizeof(id_doc), 1, Archivo); 

如果您的第一個current是一個Id_Doctor那么您將有一個無限循環。

如果在上一個current之后沒有一個不是Id_Doctor current ,則會得到非法的指針取消折舊。

針對您的問題:嘗試使用flush()系列。

您正在傳遞一個指向四字節INT的指針,但僅寫入一個字節( 錯誤的字節)!

解決方案:將id_doc聲明為“ char”,而不是“ int”。

您先前已將字符串"\\n<md>\\n""<id_doctor> "寫入文件Archivo ,這似乎表明它根本不是二進制文件,而是XML樣式的文件。

在這種情況下,您幾乎可以肯定想要的是:

fprintf(Archivo, "%d", id_doc);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM