2015-06-07 11 views
0

Обучение программированию на C. Использовал учебник, чтобы научиться записывать данные случайным образом в файл произвольного доступа. Кажется, что учебник работает нормально. Однако вывод в файле Notepad: Jones Errol Ÿru "# e © A Jones Raphael Ÿru €€" Ü'A. Это не может быть правильно да? Вы знаете, почему цифры не показывают?Странно выглядящие символы в dat-файле?

Я понятия не имею, как правильно форматировать код. Всегда кто-то говорит мне, что это плохо. Я использую CTRL + K. И в моем компиляторе точно следуют книги. Извините, если это неверно. Может быть, вы можете сказать мне, как это сделать? Благодаря Вот код:

#include <stdio.h> 
//clientData structure definition 
struct clientData{ 
     int acctNum; 
     char lastName[15]; 
     char firstName[10]; 
     double balance; 
     }; 

int main (void){ 
    FILE *cfPtr;//credit.dat file pointer 
    //create clientData with default information 
    struct clientData client={0,"","",0.0}; 
    if ((cfPtr=fopen("c:\\Users\\raphaeljones\\Desktop\\clients4.dat","rb+"))==NULL){ 
     printf("The file could not be opened\n"); 
    } 
    else { 
     //require user to specify account number 
     printf("Enter account number" 
       "(1 to 100, 0 to end input)\n"); 
     scanf("%d",&client.acctNum); 

     // users enters information which is copied into file 
     while (client.acctNum!=0) { 
                        //user enters lastname,firstname and balance 
      printf("Enter lastname,firstname, balance\n"); 

      //set record lastName,firstname and balance value 
      fscanf(stdin,"%s%s%lf", client.lastName, 
        client.firstName, &client.balance); 

      //seek position in file to user specified record 
      fseek(cfPtr, 
        (client.acctNum-1)* sizeof (struct clientData), 
        SEEK_SET); 

      //write user specified information in file 
      fwrite(&client,sizeof(struct clientData),1,cfPtr); 

      //enable user to input another account number 
      printf("Enter account number\n"); 
      scanf("%d",&client.acctNum); 
     } 
     fclose(cfPtr); 
    return 0; 

}

+0

Это похоже на то, что введенные строки меньше ширины поля. Например. lastName [15], но lastName на самом деле короче 15 .. остальные буквы появляются как мусор. Если это проблема, вам нужно выяснить, как связывать длину строки .. либо в datastructure clientData, либо с помощью строк с нулевым завершением (вы можете обрезать нуль при написании структуры данных). Например. см. http://stackoverflow.com/questions/10349842/how-does-c-know-the-end-of-my-string –

+0

будет иметь вид thx. попытался ввести строки точно такой же ширины, но тот же результат –

+0

Проблема с форматированием кода заключалась в отсутствии окончаний строк, я думаю .. просто было много пробелов? –

ответ

0

Вы создали структуру clientData, которая содержит целое число, две строки и двойной. Вы открываете файл в двоичном режиме, и вы используете fwrite() для написания структуры.

Это означает, что вы записываете целое число и double в двоичном формате, а не как строки символов, поэтому то, что вы видите, логически корректно, и вы можете прочитать файл обратно в структуру с помощью fread(), а затем распечатать его ,

Если вы хотите создать текстовый файл, вы должны использовать fprintf(). Вы можете указать ширину поля для целочисленных и двойных значений, поэтому вы можете создать запись фиксированной длины (что необходимо для произвольного доступа).

+0

Спасибо большое. Делает чувство –

 Смежные вопросы

  • Нет связанных вопросов^_^