user50164: I have boiled this down to a very simple piece of code:
int testKey;

void setup() {

Serial.begin(9600);

}

void loop() {

Serial.println("Input Source ID "); //Ask me the number

while (Serial.available()==0){ } //Wait for me to answer

testKey = Serial.parseInt();  //Store my answer in this variable

Serial.print("Parsed Input is ");  //Print the results on serial monitor

Serial.println(testKey);

}

When I run the code on my Leonardo, or Uno, I expect to have Input Source ID to be printed on the serial monitor. It remains blank (it is set to 9600 baud). If I go ahead and enter a 1, then the serial monitor starts working. However, from this point on, it seems to ask me for the ID again, and print a 0 to the serial monitor:
Parsed Input is 1
Input Source ID
Parsed Input is 0
Input Source ID
It then is waiting for me to enter a new Source ID. If I then enter a 2, this is what I get, in addition to what was already there.
Parsed Input is 1
Input Source ID 
Parsed Input is 0
Input Source ID 
Parsed Input is 2
Input Source ID 
Parsed Input is 0
Input Source ID
My question is, why doesn't the void loop start automatically and immediately prompt me for input? Secondly, after I give it a number, it seems to run it twice, inserting a 0 into the variable. Why? This seems so straightforward, but it has me stumped. I tried some delay statements here and there, to no avail. Thanks in advance.

user4143: 
My question is, why doesn't the void loop start automatically and immediately prompt me for input? 

It does. However your serial monitor isn't open at that time and can't receive it.  Unlike the Uno the Leonardo does not reset when you open the serial port.
A common workaround, to make it look more like an Uno, is to add:
while (!Serial);

in setup() after Serial.begin(...), so that it does nothing until you open the serial terminal.

Secondly, after I give it a number, it seems to run it twice, inserting a 0 into the variable. Why?

Simple: you're parsing the number as a number. You're then parsing a blank line as the number.
If you have the serial monitor set to send CR + LF as the line ending you get the integer terminated by CR, followed by no integer (represented by 0) followed by LF.

50164: <p>I have boiled this down to a very simple piece of code:</p>

<pre><code>int testKey;

void setup() {

Serial.begin(9600);

}

void loop() {

Serial.println("Input Source ID "); //Ask me the number

while (Serial.available()==0){ } //Wait for me to answer

testKey = Serial.parseInt();  //Store my answer in this variable

Serial.print("Parsed Input is ");  //Print the results on serial monitor

Serial.println(testKey);

}
</code></pre>

<p>When I run the code on my Leonardo, or Uno, I expect to have Input Source ID to be printed on the serial monitor. It remains blank (it is set to 9600 baud). If I go ahead and enter a 1, then the serial monitor starts working. However, from this point on, it seems to ask me for the ID again, and print a 0 to the serial monitor:</p>

<p>Parsed Input is 1<BR>
Input Source ID<BR>
Parsed Input is 0<BR>
Input Source ID<BR></p>

<p>It then is waiting for me to enter a new Source ID. If I then enter a 2, this is what I get, in addition to what was already there.</p>

<p>Parsed Input is 1<BR>
Input Source ID <BR>
Parsed Input is 0<BR>
Input Source ID <BR>
Parsed Input is 2<BR>
Input Source ID <BR>
Parsed Input is 0<BR>
Input Source ID<BR></p>

<p>My question is, why doesn't the void loop start automatically and immediately prompt me for input? Secondly, after I give it a number, it seems to run it twice, inserting a 0 into the variable. Why? This seems so straightforward, but it has me stumped. I tried some delay statements here and there, to no avail. Thanks in advance.</p>
 4143: <blockquote>
  <p>My question is, why doesn't the void loop start automatically and immediately prompt me for input? </p>
</blockquote>

<p>It does. However your serial monitor isn't open at that time and can't receive it.  Unlike the Uno the Leonardo <em>does not reset when you open the serial port</em>.</p>

<p>A common workaround, to make it look more like an Uno, is to add:</p>

<pre><code>while (!Serial);
</code></pre>

<p>in <code>setup()</code> after <code>Serial.begin(...)</code>, so that it does nothing until you open the serial terminal.</p>

<blockquote>
  <p>Secondly, after I give it a number, it seems to run it twice, inserting a 0 into the variable. Why?</p>
</blockquote>

<p>Simple: you're parsing the number as a number. You're then parsing a blank line as the number.</p>

<p>If you have the serial monitor set to send CR + LF as the line ending you get the integer terminated by CR, followed by no integer (represented by 0) followed by LF.</p>
