Вот мой код:

#include 
#include 
#include 

char filename[100];
FILE *stream, *stream2;
char s[20];
struct date
{
    int day, month, year;
};
struct employee
{
    int ID;
    char name[100];
    date birthdate;
    char address[20];
    char rank[20];
    int money;
};

void main()
{
    errno_t err;
    // Open for read (will fail if file "crt_fopen_s.c" does not exist)

    // Open for write 
    err = fopen_s(&stream2, "C:/Users/Van/Desktop/LAALAL/fool.txt", "w+");
    if (err == 0)
    {
        employee nv;
        std::cout << "\nInput information of an employee:\n";
        std::cout << "\tInput ID : ";
        std::cin >> nv.ID;
        std::cin.sync();
        std::cout << "\tInput name : ";
        std::cin.clear();
        gets_s(s);
        gets_s(nv.name);
        std::cout << "\tInput birthdate (Day Month Year ) : ";
        std::cin >> nv.birthdate.day >> nv.birthdate.month >> nv.birthdate.year;

        std::cout << "\tInput address: ";
        std::cin.clear();
        gets_s(s);
        gets_s(nv.address);
        std::cout << "\tInput rank : ";
        std::cin.clear();
        gets_s(s);
        gets_s(nv.rank);
        std::cout << "\tMoney : ";
        std::cin >> nv.money;
        std::cin.sync();

        std::fwrite(&nv, sizeof(nv), 1, stream2);
        std::fclose(stream2);
    }
}

Ну, у меня нет проблем с кодом, но когда я ввожу свою информацию, я не могу прочитать вывод в файле. Вот изображение моего вывода:

enter image description here

В чем моя проблема? Заранее благодарим за уделенное время!

dinhvan2804

Ответов: 2

Ответы (2)

Вы можете использовать библиотеку fstream для программирования такими операторами, как << или >>

#include 
#include 

using namespace std;
struct date
{
    int day, month, year;
};

struct employee
{
    int ID;
    char name[100];
    date birthdate;
    char address[20];
    char rank[20];
    int money;
};

int main()
{
    char ch;
    ofstream file("fool.txt");
    if (!file)
    {
        cout << ""Cannot open file, press any key to continue ...";
        cin.get();
        exit(0);
    }
    employee nv;
    cout << "\nInput information of an employee:\n";
    cout << "\tInput ID : ";
    cin >> nv.ID;
    cin.ignore();
    cout << "\tInput name : ";
    gets_s(nv.name);
    cout << "\tInput birthdate (Day Month Year) : ";
    cin >> nv.birthdate.day >> nv.birthdate.month >> nv.birthdate.year;
    cin.ignore();
    cout << "\tInput address: ";
    gets_s(nv.address);
    cout << "\tInput rank: ";
    gets_s(nv.rank);
    cout << "\tMoney: ";
    cin >> nv.money;
    cin.ignore();
    file << nv.ID << ' ' << nv.name << ' ' << nv.birthdate.day 
        << ' ' << nv.birthdate.month << ' ' << nv.birthdate.year 
        << ' ' << nv.address << ' ' << nv.rank << ' ' << nv.money << ' ';
    file.close();


    cout << "\nOutput From File : \n";
    ifstream file2("fool.txt");
    file2.get(ch);
    while (!file2.eof())
    {
        cout.put(ch);
        file2.get(ch);
    }
    file2.close();
    cout << "\nOutput Completed";
    cin.get();
}

и обратите внимание на эти подсказки:

  1. Сначала объявите об использовании пространства имен std в вашем коде, чтобы вы могли удалить предложения std ::.

    с использованием пространства имен std;
    
  2. cin.clear () и cin.sync () не обязательны, просто используйте cin.ignore () после ввода целого числа введите и перед вводом тип символа

    cin >> nv.ID;
    cin.ignore ();
    получает_s (имя_вз.);
    

    см. этот пост чтобы лучше понять

  3. вы набираете char [20]; из ввода в некоторых строках. Почему?? удалить

  4. в этом примере и с использованием операторов для программирования файлов (<<) вы должны добавить пробел после записи каждого данных в файл для отдельных данных

    файл << nv.ID << '' << nv.name
    
  5. стандартные функции для ввода или печати типа char: gets () и Put (), но вы используете gets_s (), что я думаю это из-за безопасного предупреждения, вы можете отключить эту ошибку. В этом случае, если вы хотите, чтобы ваш код использовал другой компилятор, это не будет проблемой. Вы можете прокомментировать только одну строку вместо изменения нескольких строк

    # предупреждение прагмы (отключить: 4996)
    

Вы используете функцию fwrite (), которая записывает данные в файлы как двоичный, а не как текст (ASCII). Вы должны использовать std :: ofstream класс из (вместо FILE) вместе с оператором <<.

Подробнее здесь: http://www.cplusplus.com/doc/tutorial/files/


Пример кода:

#include 
#include 
using namespace std;

struct some_struct{
    int some_int;
    char some_char;
};

int main () {
    struct some_struct x;
    x.some_int = 123123;
    x.some_char = 'x';

    //This is how you open the file.
    ofstream myfile; 
    myfile.open ("example.txt");

    //This is is how you write to it.
    myfile << "Integer: " << x.some_int << " Char: " << x.some_char;

    //This is how you close it.
    myfile.close();
    return 0;
}

Вывод внутри файла example.txt:

Integer: 123123 Char: x

2022 WebDevInsider