Member 14001096 Ответов: 2

Циклы не выполняются должным образом в моей программе! ! Может кто-нибудь мне помочь, пожалуйста! ! !


Мой цикл продолжает повторяться, несмотря на ввод N=1.

вот этот код..
void club::enterdata()
{
std::cout<<"Enter details";
std::cin>>mno>>memname>>activity;

это и есть функция... и это функция, в которой эта функция называется..
void club::writeinto()
{
    club c{};
    int N, i = 0;
    std::ofstream fout( "project.dat", std::ios::binary );
    if( ! fout )
    {
        std::cout<<"Error";
    }
    while(!fout.eof())
    {
        std::cout << "Enter the number of records to be entered";
        std::cin >> N;
        for(i=0;i<=N;i++)
        {
            c.enterdata();
        }
        fout.write( (char*)&c, sizeof(c) );
    }
    fout.close();
}
вот результат..

Введите количество вводимых записей 1
Введите данные 12 hka abc
Введите данные

Пожалуйста, помогите мне..

Что я уже пробовал:

Попробовал изменить положение скобок...

jeron1

Можно ли использовать отладчик, установить точку останова в коде и пройти через каждую строку, чтобы увидеть значения i и N? Вы также могли бы, я полагаю, вычислить значение N и i в некоторых местах, чтобы увидеть их изменение значения или увидеть, какие части кода выполняются.

Richard Deeming

for(i = 0; i <= N; i++)

Если N является 1, как вы думаете, сколько раз этот цикл будет выполняться?

2 Ответов

Рейтинг:
6

KarstenK

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

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

for(i=0;i<=N;i++)
{
    c.enterdata();
    fout.write( (char*)&c, sizeof(c) );
}  
совет: сделайте более подробный ввод-вывод для каждого элемента в enterdata() и запишите данные в виде csv-текста в файл, чтобы вы могли лучше проверить и перезагрузить его.


Рейтинг:
16

Rick York

Почему у вас есть это : "while(!fout.eof ())"?

Я думаю, что это ваша проблема. Есть НЕТ причина, чтобы сделать это. Я работаю с C и C++ уже тридцать лет и никогда не проверял наличие EOF в выходном файле во время записи в него. КОГДА-ЛИБО. Я не могу придумать ни одной причины, только причины не делать этого.


Member 14001096

В рамках школьного проекта это "пока(!fout.eof) является обязательным..