roboforum.ru

Технический форум по робототехнике.

пробные шаги в с++

пробные шаги в с++

Павел_Сергеевич » 03 фев 2015, 23:48

всем доброе время суток. не нашел в какой раздел запихнуть. выложу сюда. подскажите где ошибка. при компиляции выдает ошибку но потом программа запускается и работает.
Код: Выделить всёРазвернуть
#include<iostream>
#include <conio.h>
using namespace std;
int main()
{
char ch;
char gh;
while(ch!='\r')
  {
     cout<<"vvedite signal datchika horizont (1/0)\2\n";
    while(ch!='0')
    {
    ch=getche();

   if(ch=='1')
   cout<<"\nPovorot v pravo na 0.01s\n";
   else
   cout<<"\nPovorot v levo na 0.1s\n";
    }
    ch++;
    while(gh!='0')
    {
     gh=getche();
   if(gh=='1')
      cout<<"\nPovorot v levo na 0.01s\n";
    else
      cout<<"\nPovorot v praqvo na 0.1s\n";
    }
    gh++;
}

return 0;
}



вот продолжение кода
Код: Выделить всёРазвернуть
include<iostream>
#include <conio.h>
using namespace std;
int main()
{
int rh;
int lh;
int rv;
int lv;
while(rh!='\r')
  {
     cout<<"vvedite signal datchika horizont (1/2) i datchika vertikal (3/4) \2\n";
    while(rh!='2' && rv!='4')
    {
    rh=getche();
    rv=getche();
   if(rh=='1' && rv=='3')
   cout<<"\nPovorot v pravo na 0.01s,   Povorot vniz na 0.01s\n";
   else
      if(rv=='3')
       cout<<"\nPovorot vniz na 0.01s\n";
      else
         if(rh=='1')
            cout<<"\nPovorot v pravo na 0.01s\n";
         else
            cout<<"\nPovorot v levo na 0.1s,   Povorot vverh na 0.01s\n";
    }
    rh++; rv++;
    while(lh!='2' && lv!='4')
    {
     lh=getche();
     lv=getche();
     if(lh=='1' && lv=='3')
     cout<<"\nPovorot v levo na 0.01s,   Povorot vverh na 0.01s\n";
      else
      if(lv=='3')
        cout<<"\nPovorot vverh na 0.01s\n";
      else
         if(lh=='1')
            cout<<"\nPovorot v levo na 0.01s\n";
         else
            cout<<"\nPovorot v pravo na 0.1s,   Povorot vniz na 0.01s\n";
    }
    lh++; lv++;
}

return 0;
}

Последний раз редактировалось Павел_Сергеевич 04 фев 2015, 00:21, всего редактировалось 1 раз.

Re: пробные шаги в с++

holomrn » 03 фев 2015, 23:57

Наверное стоит написать какую ошибку. А то телепаты все в теплых краях.

Re: пробные шаги в с++

Павел_Сергеевич » 04 фев 2015, 00:28

run-time check failure #3-the variable 'rh' is being used without being initialized.

Re: пробные шаги в с++

holomrn » 04 фев 2015, 01:37

Ну и что непонятного? У вас в rh мусор (не инициализирована), а уже используется.
Код: Выделить всёРазвернуть
include<iostream>
int main()
{
int rh;
while(rh!='\r')

так понятнее?

Re: пробные шаги в с++

Павел_Сергеевич » 04 фев 2015, 10:44

хорошо. место ошибки найдено. но поскольку я далеко не профи, мне этого мало. пришлите исправленный вариант.

Добавлено спустя 1 час 11 минут 19 секунд:
для чего все собственно и делается:
Код: Выделить всёРазвернуть
#include<iostream>
#include <conio.h>
using namespace std;
int PinA =12;
int PinB =11;
int PinC =10;
int PinD =9;
int PinE =8;
int PinF =7;
void setup()

{
  pinMode(PinA, OUTPUT);
  pinMode(PinB, OUTPUT);
  pinMode(PinC, OUTPUT);
  pinMode(PinD, OUTPUT);
  pinMode(PinE, INPUT);
  pinMode(PinF, INPUT);
}
void loop()
{
int main()
{
int ch=PinE;
int gh=PinE;
while(ch!='\r')    //для бесконечного цыкла
  {
    while(ch=0, ch<500)
    digitalWrite(PinA, HIGH);
    delay(100);
    digitalWrite(PinA, LOW);
    delay(10);
    {
   if(ch>500)
   digitalWrite(PinA, HIGH);
        delay(10);
        digitalWrite(PinA, LOW);
        delay(2);
   else
   digitalWrite(PinB, HIGH);
        delay(10);
        digitalWrite(PinB, LOW);
        delay(2);
    }
       while(ch=0, ch<500)
    digitalWrite(PinA, HIGH);
    delay(100);
    digitalWrite(PinA, LOW);
    delay(10);
    {
   if(ch>500)
   digitalWrite(PinB, HIGH);
        delay(10);
        digitalWrite(PinB, LOW);
        delay(2);
   else
   digitalWrite(PinA, HIGH);
        delay(10);
        digitalWrite(PinA, LOW);
        delay(2);
    }
     }
   }
}

тоже ошибку выдает но другую:
dance.ino: In function 'void loop()':
dance:23: error: a function-definition is not allowed here before '{' token
dance:64: error: expected `}' at end of input

Re: пробные шаги в с++

Madf » 04 фев 2015, 11:59

Вы не профи - вам пофиг.
Говорите "спасибо".
Разбирайте ошибки.
Учите язык.
Больше практики...инет в помощь.

Re: пробные шаги в с++

Romikgy » 04 фев 2015, 12:10

в loop не надо использовать main !

int rh=0;

Re: пробные шаги в с++

Павел_Сергеевич » 04 фев 2015, 14:29

Romikgy писал(а):в loop не надо использовать main !

int rh=0;

с присвоением 0 получилось, огромное спасибо! четко и понятно.
А вот ардуино теперь ругается на else
Код: Выделить всёРазвернуть
#include<iostream>
#include <conio.h>
using namespace std;
int PinA =12;
int PinB =11;
int PinC =10;
int PinD =9;
int PinE =8;
int PinF =7;
void setup()

{
  pinMode(PinA, OUTPUT);
  pinMode(PinB, OUTPUT);
  pinMode(PinC, OUTPUT);
  pinMode(PinD, OUTPUT);
  pinMode(PinE, INPUT);
  pinMode(PinF, INPUT);
}
void loop()

{
int ch=PinE;
int gh=PinE;
while(ch!='\r')    //для бесконечного цикла
  {
    while(ch=0, ch<500)
    digitalWrite(PinA, HIGH);
    delay(100);
    digitalWrite(PinA, LOW);
    delay(10);
    {
   if(ch>500)
   digitalWrite(PinA, HIGH);
        delay(10);
        digitalWrite(PinA, LOW);
        delay(2);
   else
   digitalWrite(PinB, HIGH);
        delay(10);
        digitalWrite(PinB, LOW);
        delay(2);
    }
       while(ch=0, ch<500)
    digitalWrite(PinA, HIGH);
    delay(100);
    digitalWrite(PinA, LOW);
    delay(10);
    {
   if(ch>500)
   digitalWrite(PinB, HIGH);
        delay(10);
        digitalWrite(PinB, LOW);
        delay(2);
   else
   digitalWrite(PinA, HIGH);
        delay(10);
        digitalWrite(PinA, LOW);
        delay(2);
    }
     }
   }

Boidar_test.ino: In function 'void loop()':
Boidar_test:38: error: 'else' without a previous 'if'
Boidar_test:55: error: 'else' without a previous 'if'

Re: пробные шаги в с++

RootAdmin » 04 фев 2015, 15:54

А скобки где?! "{" Надо хоть читать, что компилятор донести пытается. И перед программированием язык подучить.

Добавлено спустя 1 минуту 26 секунд:
операторы после условия - заключаются в скобки.
Читаем. http://arduino.ru/Reference/Else

Re: пробные шаги в с++

Romikgy » 04 фев 2015, 15:54

все что хотите делать при условии if(ch>500) должно быть заключено в { }
после else также должно быть заключено в { }

Re: пробные шаги в с++

holomrn » 04 фев 2015, 18:22

Павел_Сергеевич по языку читать букварь, а по ардуине посмотреть уроки на амперке. И только потом возвращайтесь с вопросами.
*букварь - K&R - Керниган, Ричи "Язык программирования С"

Re: пробные шаги в с++

Павел_Сергеевич » 04 фев 2015, 21:28

Romikgy писал(а):все что хотите делать при условии if(ch>500) должно быть заключено в { }
после else также должно быть заключено в { }

Как всегда, все четко и понятно, при прогоне все работает. спасибо!

Добавлено спустя 4 минуты 38 секунд:
holomrn писал(а):Павел_Сергеевич по языку читать букварь, а по ардуине посмотреть уроки на амперке. И только потом возвращайтесь с вопросами.
*букварь - K&R - Керниган, Ричи "Язык программирования С"

я читаю ооп лафоре, пока дошод до continue в циклах.

Re: пробные шаги в с++

holomrn » 04 фев 2015, 22:03

До оопа надо хоть основы языка выучить. Чтобы не спрашивать куда делась фигурная скобка и почему компилятор ругается на использование неинициализированной переменной.

Re: пробные шаги в с++

Павел_Сергеевич » 06 фев 2015, 00:23

не меняет направление вращения. завис на первом цикле и не переходит дальше. мониторинг порта показывпет при открытом экране между диодом и сенсором 902, про закрытом 180-200.
Код: Выделить всёРазвернуть
#include<iostream>
#include<conio.h>
using namespace std;
int PinA =12;
int PinB =11;
int PinC =10;
int PinD =9;
int PinE =0;
void setup()
{
Serial.begin(9600); //установка общение с компом в скобках скорость
pinMode(PinA, OUTPUT); //УСТАНОВКА КАК ВЫХОД
pinMode(PinB, OUTPUT); //УСТАНОВКА КАК ВЫХОД
pinMode(PinC, OUTPUT); //УСТАНОВКА КАК ВЫХОД
pinMode(PinD, OUTPUT); //УСТАНОВКА КАК ВЫХОД
pinMode(PinE, INPUT); //УСТАНОВКА КАК ВХОД
}
void loop()
{ //горизонталь
int ch=PinE;
while(ch!='\r')
{
digitalWrite(PinA, HIGH);
Serial.println(analogRead(ch));
delay(100); // первый импульс для приведения датчиков в чувства
digitalWrite(PinA, LOW);
delay(10); // остановка для запуска основной программы
if(ch>500)
{
digitalWrite(PinA, HIGH);
Serial.println(analogRead(ch));
delay(100);
digitalWrite(PinA, LOW);
delay(1);
}
else
{
digitalWrite(PinA, LOW);
delay(1);
}}
{
digitalWrite(PinB, HIGH);
Serial.println(analogRead(ch));
delay(10); // первый импульс для приведения датчиков в чувства
digitalWrite(PinB, LOW);
delay(1); // остановка для запуска основной программы
{
if(ch>500)
{
digitalWrite(PinB, HIGH);
Serial.println(analogRead(ch));
delay(10);
digitalWrite(PinB, LOW);
delay(2);
}
else
{
digitalWrite(PinB, LOW);
delay(2);
}
}}
}

я думаю else тут вообще лишнее. просто код в стадии эксперементов.

Re: пробные шаги в с++

Angel71 » 06 фев 2015, 01:38

первый цикл бесконечный по определению. при входе во второй он становится бесконечным по факту и else к этому вообще не при чём. для начала или тренируйте внимательность и уменее считать хотя бы скобки или нормально код форматировать. а в общем вам пока лучше уделять побольше времени на изучение самого языка и поменьше на всякие ардуинки и потуги покодить ваши хотелки.
по текущему коду вообще мало что понятно, что хотели и где именно и как нужно переделывать. кусок после while цикла пока абсолютно не имеет смысла хотя бы по той причине, что он никогда не выполнится. в самом while тоже только телепатией заниматься. допустим смотря на "if(ch>500)". может вам еще разок нужно почитать про функции и присваивание значений? и т.д. по всему коду.
Последний раз редактировалось Angel71 06 фев 2015, 02:20, всего редактировалось 1 раз.


Rambler\'s Top100 Mail.ru counter