Множественный цикл for в C

#c 11 #for-loop

#c 11 #for-цикл

Вопрос:

Я пытаюсь записать текущее время и некоторые данные (расстояние и амплитуду) от датчика в текстовый файл. Количество данных очень велико (датчик вращается с частотой 50 Гц, а количество данных может составлять 5000 за сканирование). Теперь я хочу сначала записать текущее время, а затем все данные в одной строке, например,

 11:23:17 (time)  
distance1 amplitude1; distance2 amplitude2; ... distance5000 amplitude5000;  
11:23:18  
distance1 amplitude1; distance2 amplitude2; ... distance5000 amplitude5000;  
.  
.  
.
11:27:00  
distance1 amplitude1; distance2 amplitude2; ... distance5000 amplitude5000;  
 

«Итак, мой вопрос в том, как это получить?»
Я могу записать только расстояние и данные, как показано ниже

 for(int t=0; t<distances.size(); t  )
 {
    pfsave << distances[t] <<"t" << amplitudes[t]<<";";
 }
 pfsave<<endl;
 

Примечание: тип данных расстояний и амплитуд

 vector<uint32_t> distacnes;
vector<uint32_t> amplitudes;
 

Комментарии:

1. Кажется, вы забыли включить вопрос в свой вопрос.

2. Я предлагаю не писать endl , когда вы хотите разместить все данные в одной строке.

Ответ №1:

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

 auto t = std::time(nullptr);
auto tm = *std::localtime(amp;t);
pfsave  << std::put_time(amp;tm, "%H:%M:%S") << std::endl;
 

Затем ваш цикл for без endl , чтобы написать одну строку:

 for(int t=0; t<distances.size(); t  )
{
    pfsave << distances[t] <<"t" << amplitudes[t]<<";";
}
 

И, наконец, добавьте endl , чтобы закончить строку:

 pfsave << endl;
 

РЕДАКТИРОВАТЬ: после вашего комментария

 bool canContinue = true; // Condition used to stop the loop when needded
while(canContinue)
{
    // Read data from your scanning device
    distances  = ... ;
    amplitudes = ... ;

    // Write output file
    auto t = std::time(nullptr);
    auto tm = *std::localtime(amp;t);
    pfsave  << std::put_time(amp;tm, "%H:%M:%S") << std::endl;

    for(int t=0; t<distances.size(); t  )
        pfsave << distances[t] <<"t" << amplitudes[t]<<";";
    pfsave << endl;

    // Update of canContinue
    canContinue = ... ;
}
 

Комментарии:

1. Дело в том, что если я сделаю это, он запишет только одну строку (все данные только из одного сканирования), а затем остановится. Я хочу записывать данные непрерывно.

2. Затем вам нужно поместить все это в while for цикл или, захватывая distances и amplitudes на каждой итерации.

3. Я попробовал цикл while, и мои программы пошли по бесконечному циклу.

4. Если я попробую for цикл, он будет записывать одни и те же данные снова и снова.

5. О бесконечном цикле: вам нужно определить условие остановки (возможно, сигнал от вашего сканирующего устройства или кнопка в графическом интерфейсе, это зависит от вас). Что касается записи одних и тех же данных, вам необходимо обновить свои массивы с устройства сканирования. Вам следует посмотреть примеры от его производителя или из SDK, если вы его используете.