Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
  1. Home
  2. Troubleshooting
  3. Dynamic change of variable name

Dynamic change of variable name

Scheduled Pinned Locked Moved Troubleshooting
14 Posts 7 Posters 587 Views 6 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • G Greg_2502

    Hi, I can't find a solution to my problem.
    I'd like to change the name in a function in a for loop. If it is possible?

    for (i=1; i<5; i++){
    int value[i] = debouncer[i].read();
    }
    
    YveauxY Offline
    YveauxY Offline
    Yveaux
    Mod
    wrote on last edited by
    #3

    @greg_2502 do you mean to fill an array?
    Something like

    int value[5];
    for (i=1; i<5; i++){
      value[i] = debouncer[i].read();
    }
    

    http://yveaux.blogspot.nl

    skywatchS 1 Reply Last reply
    0
    • YveauxY Yveaux

      @greg_2502 do you mean to fill an array?
      Something like

      int value[5];
      for (i=1; i<5; i++){
        value[i] = debouncer[i].read();
      }
      
      skywatchS Offline
      skywatchS Offline
      skywatch
      wrote on last edited by
      #4

      @yveaux Shouldn't that be int value[4]; ? ;)

      mfalkviddM 1 Reply Last reply
      0
      • skywatchS skywatch

        @yveaux Shouldn't that be int value[4]; ? ;)

        mfalkviddM Offline
        mfalkviddM Offline
        mfalkvidd
        Mod
        wrote on last edited by
        #5

        @skywatch not if the 0th position is skipped

        skywatchS 1 Reply Last reply
        1
        • mfalkviddM mfalkvidd

          @skywatch not if the 0th position is skipped

          skywatchS Offline
          skywatchS Offline
          skywatch
          wrote on last edited by
          #6

          @mfalkvidd Hehehe...... ;)

          But i starts at 1 yes? and then increments in interger units whilst it is less than 5. So that should give 1,2,3,4. Or have I been under a misunderstanding?

          mfalkviddM 1 Reply Last reply
          0
          • skywatchS skywatch

            @mfalkvidd Hehehe...... ;)

            But i starts at 1 yes? and then increments in interger units whilst it is less than 5. So that should give 1,2,3,4. Or have I been under a misunderstanding?

            mfalkviddM Offline
            mfalkviddM Offline
            mfalkvidd
            Mod
            wrote on last edited by
            #7

            @skywatch arrays indexes in c/c++ always start at 0.
            int myarray[5] would have positions 0 thorugh 4. Position 5 would be outside the array. In the code above, position 0 is never used.

            So either make the array 1 element larger than actually needed (with position 0 unused), or let i start at 0:

            int value[4];
            for (i=0; i<4; i++){
              value[i] = debouncer[i].read();
            }
            
            Sergio RiusS skywatchS 2 Replies Last reply
            0
            • mfalkviddM mfalkvidd

              @skywatch arrays indexes in c/c++ always start at 0.
              int myarray[5] would have positions 0 thorugh 4. Position 5 would be outside the array. In the code above, position 0 is never used.

              So either make the array 1 element larger than actually needed (with position 0 unused), or let i start at 0:

              int value[4];
              for (i=0; i<4; i++){
                value[i] = debouncer[i].read();
              }
              
              Sergio RiusS Offline
              Sergio RiusS Offline
              Sergio Rius
              wrote on last edited by Sergio Rius
              #8

              @mfalkvidd said in Dynamic change of variable name:

              int myarray[5] would have positions 0 thorugh 4. Position 5 would be outside the array. In the code above, position 0 is never used.

              So either make the array 1 element larger than actually needed (with position 0 unused), or let i start at 0:

              In fact, I interpreted it more like @skywatch
              Notice the <=

               int value[5];
               for (i=1; i<=5; i++){
                 value[i] = debouncer[i].read();
               }
              

              I just made something like this for indexing sensors in a node, where idx 0 was the node itself, and thus already filled before the loop.

              YveauxY 1 Reply Last reply
              0
              • Sergio RiusS Sergio Rius

                @mfalkvidd said in Dynamic change of variable name:

                int myarray[5] would have positions 0 thorugh 4. Position 5 would be outside the array. In the code above, position 0 is never used.

                So either make the array 1 element larger than actually needed (with position 0 unused), or let i start at 0:

                In fact, I interpreted it more like @skywatch
                Notice the <=

                 int value[5];
                 for (i=1; i<=5; i++){
                   value[i] = debouncer[i].read();
                 }
                

                I just made something like this for indexing sensors in a node, where idx 0 was the node itself, and thus already filled before the loop.

                YveauxY Offline
                YveauxY Offline
                Yveaux
                Mod
                wrote on last edited by
                #9

                @sergio-rius said in Dynamic change of variable name:

                Notice the <=

                That will cause a buffer overrun at the end again...

                http://yveaux.blogspot.nl

                skywatchS Sergio RiusS 2 Replies Last reply
                2
                • YveauxY Yveaux

                  @sergio-rius said in Dynamic change of variable name:

                  Notice the <=

                  That will cause a buffer overrun at the end again...

                  skywatchS Offline
                  skywatchS Offline
                  skywatch
                  wrote on last edited by
                  #10

                  @yveaux Can you please explain why as I want to learn why it won't run the code the way I expected it to! -

                  1 Reply Last reply
                  0
                  • mfalkviddM mfalkvidd

                    @skywatch arrays indexes in c/c++ always start at 0.
                    int myarray[5] would have positions 0 thorugh 4. Position 5 would be outside the array. In the code above, position 0 is never used.

                    So either make the array 1 element larger than actually needed (with position 0 unused), or let i start at 0:

                    int value[4];
                    for (i=0; i<4; i++){
                      value[i] = debouncer[i].read();
                    }
                    
                    skywatchS Offline
                    skywatchS Offline
                    skywatch
                    wrote on last edited by skywatch
                    #11

                    @mfalkvidd That won't get '0 through 4' as it will never produce i=4 in this case. I would expect it to need to be

                    int value[4];
                    for (i=0; i<=4; i++){
                      value[i] = debouncer[i].read();
                    }
                    

                    in order to get 0 through 4 (note the extra '=' in line 2 above to make this work. Or am I still misunderstanding something? ???

                    1 Reply Last reply
                    0
                    • YveauxY Yveaux

                      @sergio-rius said in Dynamic change of variable name:

                      Notice the <=

                      That will cause a buffer overrun at the end again...

                      Sergio RiusS Offline
                      Sergio RiusS Offline
                      Sergio Rius
                      wrote on last edited by
                      #12

                      It's as easy as trying it.

                      @yveaux said in Dynamic change of variable name:

                      That will cause a buffer overrun at the end again...

                      Really? I can't see why a loop trough 1, 2, 3, 4 could overflow a 5 elements array.

                      In my code, I manually add 0 (the device itself, for vcc) before entering the loop. So in this case, still 5 elements.

                      badmannenB 1 Reply Last reply
                      0
                      • Sergio RiusS Sergio Rius

                        It's as easy as trying it.

                        @yveaux said in Dynamic change of variable name:

                        That will cause a buffer overrun at the end again...

                        Really? I can't see why a loop trough 1, 2, 3, 4 could overflow a 5 elements array.

                        In my code, I manually add 0 (the device itself, for vcc) before entering the loop. So in this case, still 5 elements.

                        badmannenB Offline
                        badmannenB Offline
                        badmannen
                        wrote on last edited by
                        #13

                        @sergio-rius
                        the loop will run even at "5".
                        that is the problem. if you write "i<5" , then it would be ok

                        rPi 3 - UNO R3 - Mini - Nano - custom

                        1 Reply Last reply
                        0
                        • Sergio RiusS Offline
                          Sergio RiusS Offline
                          Sergio Rius
                          wrote on last edited by
                          #14

                          @badmannen @Yveaux You're absolutely right. I was lazy, only changed a symbol and gave a bad advice. My response should be changed to <=4.

                          Still I don't understand what the original question was.

                          1 Reply Last reply
                          0
                          Reply
                          • Reply as topic
                          Log in to reply
                          • Oldest to Newest
                          • Newest to Oldest
                          • Most Votes


                          18

                          Online

                          11.7k

                          Users

                          11.2k

                          Topics

                          113.1k

                          Posts


                          Copyright 2025 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
                          • Login

                          • Don't have an account? Register

                          • Login or register to search.
                          • First post
                            Last post
                          0
                          • MySensors
                          • OpenHardware.io
                          • Categories
                          • Recent
                          • Tags
                          • Popular