Форум программистов, компьютерный форум CyberForum.ru

С++ Баг в бесконечном цикле - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Сравнить строки двухмерного символьного массива http://www.cyberforum.ru/cpp-beginners/thread1693569.html
Здравствуйте, пропустил эти темы по учебе, нужно срочно решить. Помогите, пожалуйста, заранее спасибо :^) Для заданного двухмерного символьного массива сравните длину каждой строки друг с другом и вывести результат сравнения: 1-я строка меньше или больше 2-й строки, строки равны между собой.
C++ Обработка одномерных массивов 1. a) Одномерный массив из 5 элементов целого типа в диапазоне ; b) Дополнить исходный массив, начиная с третьего номера, пятью двойками, сдвигая элементы массива; с) Найти максимальный элемент преобразованного массива; d) Вывести исходный, полученный массивы и значение максимального элемента. на языке с++. Есть начало : #include <iostream> #include <cstdlib> #include <ctime> using... http://www.cyberforum.ru/cpp-beginners/thread1693555.html
C++ Одномерный массив из 10 элементов целого типа в диапазоне [-80, -50]
Помогите написать прогу,очень срочно сейчас экзамен!!!!!!!! а)Одномерный массив из 10 элементов целого типа в диапазоне ; b) Сдвинуть элементы исходного массива на 5 значений к началу, заполнив пустые места единицами; с) Вычислить сумму элементов нового массива; d) Вывести исходный, полученный массивы и значение суммы.
Сколько чисел в диапозоне не делятся нацело на заданное число? C++
Водится M и N (M<N, M>=2, N<=1000000000) вывести на экран сколько чисел в диапозоне от 2 до N включительно не делятся нацело на M а то забыл все за 15 лет
C++ Обработка одномерных массивов http://www.cyberforum.ru/cpp-beginners/thread1693546.html
1. a) Одномерный массив из 5 элементов целого типа в диапазоне ; b) Дополнить исходный массив, начиная с третьего номера, пятью двойками, сдвигая элементы массива; с) Найти максимальный элемент преобразованного массива; d) Вывести исходный, полученный массивы и значение максимального элемента. на языке с++. Есть начало : #include <iostream> #include <cstdlib> #include <ctime> using...
C++ Удалить из исходного массива три первых элемента, сдвигая элементы массива, напечатать их значения Помогите с созданием программы, которая выполняет следующие действия: 1) Одномерный массив из 10 элементов целого типа в диапазоне ; 2) Удалить из исходного массива три первых элемента, сдвигая элементы массива, напечатать их значения; 3) Найти произведение элементов преобразованного массива; 4) Вывести исходный, полученный массивы и значение произведения. подробнее

Показать сообщение отдельно
dsimbu
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 13
24.03.2016, 14:31     С++ Баг в бесконечном цикле
Здравствуй, читатель!
Написал я программу, которая должна в определенное время запускать определенную программу. Казалось бы, код примитивен и просто, НО!, работает он как-то странно. Есть в нем привычные вещи: объявление переменных, некий ритуал с переменными и цикл, да не простой, а бесконечный. В цикле том 3 условия (идентичные, только по параметрам сравнения немного различаются, да и действия выполняют одинаковые).
И так, в чем вопрос:
Почему программа, находясь в зацикленном состоянии, работает странно? Если я задам intTemp значение, совпадающее с минутой запуска, то If, в котором будет условие соответствовать, отработает как надо и присвоит переменной intTemp следующее значение для запуска (в идеале я сравниваю время просто с 0, 20 и 40, поэтому и 3 цикла), выведет на экран время отработки. А вот дальше начинается то, что я понять не могу. Спустя минуту, переменная intTemp уже должна соответствовать текущей минуте, но программа не срабатывает, но зато выводит это самое значение переменной, то есть программа не висит, а исправно работает, но почему-то циклы пропускает... ПОЧЕМУ?

Использую я DEV-CPP крайней доступной версии на момент публикации этого поста.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <iostream>
#include <windows.h>
#include <time.h>
 
using namespace std;
 
int main(int argc, char** argv) {
    char chTimeTemp[4]="";
    string strTimeShare="";
    time_t t;
    tm *tk;
    time(&t);
    tk=localtime(&t);
    int intTemp=35, intFrStart=0;   
    system("title OnTimeStart");
    
    
//  ShellExecute (0, "open", "start.bat", NULL, "E:\\Users\\internet_2671\\Desktop\\VHScan\\lastversion", SW_SHOWNORMAL);
    
    while(1){
        strTimeShare="";
        
        if (tk->tm_mday<10) 
            strTimeShare += "0";
        strTimeShare += itoa(tk->tm_mday, &chTimeTemp[0], 10);  
        strTimeShare += "."; 
        if (tk->tm_mon<9)
            strTimeShare += "0";
        strTimeShare += itoa(tk->tm_mon+1, &chTimeTemp[0], 10);
        strTimeShare += "."; 
        strTimeShare += itoa(tk->tm_year +1900, &chTimeTemp[0], 10);
        strTimeShare += " ";
        if (tk->tm_hour<10)
            strTimeShare += "0"; 
        strTimeShare += itoa(tk->tm_hour, &chTimeTemp[0], 10);
        strTimeShare += ":";
        if (tk->tm_min<10)
            strTimeShare += "0"; 
        strTimeShare += itoa(tk->tm_min, &chTimeTemp[0], 10);
        strTimeShare += ":";
        if (tk->tm_sec<10)
            strTimeShare += "0"; 
        strTimeShare += itoa(tk->tm_sec, &chTimeTemp[0], 10);
        
        //cout<<strTimeShare;
        
//      if (tk->tm_hour == 18) Sleep(50400000);
        
//      if (intFrStart == 0){
//          intFrStart = 1;
//          if (tk->tm_min >= 0 && tk->tm_min < 20) intTemp = 20;
//          if (tk->tm_min > 20 &&  tk->tm_min < 40) intTemp = 40;
//          if (tk->tm_min > 40 &&  tk->tm_min <= 59) intTemp = 0;
//          cout<<intTemp<<endl<<strTimeShare<<endl;
//      }
                
        if  (tk->tm_min == intTemp) {
//          ShellExecute (0, "open", "start.bat", NULL, "E:\\Users\\internet_2671\\Desktop\\VHScan\\lastversion", SW_SHOWNORMAL);
            cout<<strTimeShare<<endl;
            intTemp = 36;
        }
        
        if  (tk->tm_min == intTemp) {
//          ShellExecute (0, "open", "start.bat", NULL, "E:\\Users\\internet_2671\\Desktop\\VHScan\\lastversion", SW_SHOWNORMAL);
            cout<<strTimeShare<<endl;
            intTemp = 37;
        }
        
        if  (tk->tm_min == intTemp) {
//                  ShellExecute (0, "open", "start.bat", NULL, "E:\\Users\\internet_2671\\Desktop\\VHScan\\lastversion", SW_SHOWNORMAL);
            cout<<strTimeShare<<endl;
            intTemp = 38;
        }
        Sleep(1000);
        cout<<intTemp<<endl;
        
    }
}
Добавлено через 25 минут
Задача решена. Все оказалось очень легко и просто. Я думал что ко времени я обращаюсь как по ссылке, а оказалось что я в начале его получаю и постоянно работаю с ним. Перенес получение времени в while и все заработало как по часам =))
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 14:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru