Understanding the goto Statement in C: Usage and Examples

Rumman Ansari   Software Engineer   2024-11-10 10:35:34   11491  Share
Subject Syllabus DetailsSubject Details 1 Questions
☰ TContent
☰Fullscreen

Executing a goto statement causes a direct branch to be made to a specified point in the program. To identify where in the program the branch is to be made, a label is needed. A label is a name formed with the same rules as variable names; it must be immediately followed by a colon. The label is placed directly before the statement to which the branch is to be made and must appear in the same function or method as the goto.

Syntax of goto statement

goto label;
... .. ...
... .. ...
... .. ...
label: 
statement;

Example of goto Statement

<span class="pln">
</span><span class="com">#include</span><span class="str">&lt;stdio.h&gt;</span><span class="pln">
</span><span class="kwd">void</span><span class="pln"> main</span><span class="pun">()</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> goals </span><span class="pun">;</span><span class="pln">
printf</span><span class="pun">(</span><span class="str">"Enter the number of goals scored against India "</span><span class="pun">);</span><span class="pln">
scanf</span><span class="pun">(</span><span class="str">"%d"</span><span class="pun">,</span><span class="pln"> </span><span class="pun">&amp;</span><span class="pln">goals</span><span class="pun">)</span><span class="pln"> </span><span class="pun">;</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">goals </span><span class="pun">&lt;=</span><span class="pln"> </span><span class="lit">5</span><span class="pun">)</span><span class="pln">
	</span><span class="kwd">goto</span><span class="pln"> atnyla </span><span class="pun">;</span><span class="pln">
</span><span class="kwd">else</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
	printf</span><span class="pun">(</span><span class="pln"> </span><span class="str">"About time soccer players learnt C\n"</span><span class="pun">);</span><span class="pln">
	printf</span><span class="pun">(</span><span class="pln"> </span><span class="str">"and said goodbye! adieu! to soccer \n"</span><span class="pun">);</span><span class="pln">
	</span><span class="kwd">exit</span><span class="pun">()</span><span class="pln"> </span><span class="pun">;</span><span class="pln"> </span><span class="com">/* terminates program execution */</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
atnyla </span><span class="pun">:</span><span class="pln">
	printf</span><span class="pun">(</span><span class="str">"To err is human! \n"</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span>
Output 1
Enter the number of goals scored against India 4
To err is human!
Press any key to continue . . .

Output 2
Enter the number of goals scored against India 8
About time soccer players learnt C
and said goodbye! adieu! to soccer
Press any key to continue . . .


The only programming situation in favour of using goto is when we want to take the control out of the loop that is contained in several other loops. The following program illustrates this.

<span class="pln">
</span><span class="com">#include</span><span class="str">&lt;stdio.h&gt;</span><span class="pln">
</span><span class="kwd">void</span><span class="pln"> main</span><span class="pun">(</span><span class="pln"> </span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> i</span><span class="pun">,</span><span class="pln"> j</span><span class="pun">,</span><span class="pln"> k </span><span class="pun">;</span><span class="pln">
</span><span class="kwd">for</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> i </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="pun">;</span><span class="pln"> i </span><span class="pun">&lt;=</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="pun">;</span><span class="pln"> i</span><span class="pun">++</span><span class="pln"> </span><span class="pun">)</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">
		</span><span class="kwd">for</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> j </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="pun">;</span><span class="pln"> j </span><span class="pun">&lt;=</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="pun">;</span><span class="pln"> j</span><span class="pun">++</span><span class="pln"> </span><span class="pun">)</span><span class="pln">
		</span><span class="pun">{</span><span class="pln">
		</span><span class="kwd">for</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> k </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="pun">;</span><span class="pln"> k </span><span class="pun">&lt;=</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="pun">;</span><span class="pln"> k</span><span class="pun">++</span><span class="pln"> </span><span class="pun">)</span><span class="pln">
		</span><span class="pun">{</span><span class="pln">
			</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> i </span><span class="pun">==</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="pun">&amp;&amp;</span><span class="pln"> j </span><span class="pun">==</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="pun">&amp;&amp;</span><span class="pln"> k </span><span class="pun">==</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="pun">)</span><span class="pln">
			</span><span class="kwd">goto</span><span class="pln"> </span><span class="kwd">out</span><span class="pln"> </span><span class="pun">;</span><span class="pln">
			</span><span class="kwd">else</span><span class="pln">
			printf </span><span class="pun">(</span><span class="pln"> </span><span class="str">"%d %d %d\n"</span><span class="pun">,</span><span class="pln"> i</span><span class="pun">,</span><span class="pln"> j</span><span class="pun">,</span><span class="pln"> k </span><span class="pun">)</span><span class="pln"> </span><span class="pun">;</span><span class="pln">
		</span><span class="pun">}</span><span class="pln">
	</span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">out</span><span class="pln"> </span><span class="pun">:</span><span class="pln">
printf </span><span class="pun">(</span><span class="pln"> </span><span class="str">"Out of the loop at last! \n"</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span>
1 1 1
1 1 2
1 1 3
1 2 1
1 2 2
1 2 3
1 3 1
1 3 2
1 3 3
2 1 1
2 1 2
2 1 3
2 2 1
2 2 2
2 2 3
2 3 1
2 3 2
2 3 3
3 1 1
3 1 2
3 1 3
3 2 1
3 2 2
3 2 3
3 3 1
3 3 2
Out of the loop at last!
Press any key to continue . . .

Example of goto Statement

<span class="pln">

</span><span class="com">// Program to calculate the sum and average of maximum of 5 numbers</span><span class="pln">
</span><span class="com">/* If user enters negative number, the sum and average of previously
 entered positive number is displayed */</span><span class="pln">

</span><span class="com"># include&lt;stdio.h&gt;</span><span class="pln">

</span><span class="kwd">int</span><span class="pln"> main</span><span class="pun">()</span><span class="pln">
</span><span class="pun">{</span><span class="pln">

    </span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> maxInput </span><span class="pun">=</span><span class="pln"> </span><span class="lit">5</span><span class="pun">;</span><span class="pln">
    </span><span class="kwd">int</span><span class="pln"> i</span><span class="pun">;</span><span class="pln">
    </span><span class="kwd">double</span><span class="pln"> number</span><span class="pun">,</span><span class="pln"> average</span><span class="pun">,</span><span class="pln"> sum</span><span class="pun">=</span><span class="lit">0.0</span><span class="pun">;</span><span class="pln">
    
    </span><span class="kwd">for</span><span class="pun">(</span><span class="pln">i</span><span class="pun">=</span><span class="lit">1</span><span class="pun">;</span><span class="pln"> i</span><span class="pun">&lt;=</span><span class="pln">maxInput</span><span class="pun">;</span><span class="pln"> </span><span class="pun">++</span><span class="pln">i</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">
        printf</span><span class="pun">(</span><span class="str">"%d. Enter a number: "</span><span class="pun">,</span><span class="pln"> i</span><span class="pun">);</span><span class="pln">
        scanf</span><span class="pun">(</span><span class="str">"%lf"</span><span class="pun">,&amp;</span><span class="pln">number</span><span class="pun">);</span><span class="pln">

    </span><span class="com">// If user enters negative number, flow of program moves to label jump</span><span class="pln">
        </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">number </span><span class="pun">&lt;</span><span class="pln"> </span><span class="lit">0.0</span><span class="pun">)</span><span class="pln">
            </span><span class="kwd">goto</span><span class="pln"> jump</span><span class="pun">;</span><span class="pln">

        sum </span><span class="pun">+=</span><span class="pln"> number</span><span class="pun">;</span><span class="pln"> </span><span class="com">// sum = sum+number;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">

    jump</span><span class="pun">:</span><span class="pln">

    average</span><span class="pun">=</span><span class="pln">sum</span><span class="pun">/(</span><span class="pln">i</span><span class="pun">-</span><span class="lit">1</span><span class="pun">);</span><span class="pln">
    printf</span><span class="pun">(</span><span class="str">"Sum = %.2f\n"</span><span class="pun">,</span><span class="pln"> sum</span><span class="pun">);</span><span class="pln">
    printf</span><span class="pun">(</span><span class="str">"Average = %.2f \n"</span><span class="pun">,</span><span class="pln"> average</span><span class="pun">);</span><span class="pln">

    </span><span class="kwd">return</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span>
1. Enter a number: 5
2. Enter a number: 4
3. Enter a number: 2.1
4. Enter a number: 1.6
5. Enter a number: -2.6
Sum = 12.70
Average = 3.17
Press any key to continue . . .

Example of goto Statement

<span class="pln">
 
</span><span class="com">// even or not using goto statement</span><span class="pln">
</span><span class="com">#include</span><span class="pln"> </span><span class="str">&lt;stdio.h&gt;</span><span class="pln"> 
</span><span class="com">// function to check even or not</span><span class="pln">
</span><span class="kwd">void</span><span class="pln"> checkEvenOrNot</span><span class="pun">(</span><span class="kwd">int</span><span class="pln"> num</span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">num </span><span class="pun">%</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="lit">0</span><span class="pun">)</span><span class="pln">
        </span><span class="kwd">goto</span><span class="pln"> even</span><span class="pun">;</span><span class="pln"> </span><span class="com">// jump to even</span><span class="pln">
    </span><span class="kwd">else</span><span class="pln">
        </span><span class="kwd">goto</span><span class="pln"> odd</span><span class="pun">;</span><span class="pln"> </span><span class="com">// jump to odd</span><span class="pln">
 
even</span><span class="pun">:</span><span class="pln">
    printf</span><span class="pun">(</span><span class="str">"%d is even \n"</span><span class="pun">,</span><span class="pln">num</span><span class="pun">);</span><span class="pln">
    </span><span class="kwd">return</span><span class="pun">;</span><span class="pln"> </span><span class="com">// return if even</span><span class="pln">
odd</span><span class="pun">:</span><span class="pln">
    printf</span><span class="pun">(</span><span class="str">"%d is odd\n"</span><span class="pun">,</span><span class="pln">num</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
 
</span><span class="com">// Driver program to test above function</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> main</span><span class="pun">()</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">int</span><span class="pln"> num </span><span class="pun">=</span><span class="pln"> </span><span class="lit">26</span><span class="pun">;</span><span class="pln">
    checkEvenOrNot</span><span class="pun">(</span><span class="pln">num</span><span class="pun">);</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span>
26 is even
Press any key to continue . . .

No Program Data.

Stay Ahead of the Curve! Check out these trending topics and sharpen your skills.