C Loop termination question

Posted on 2001-07-25
Last Modified: 2010-04-15
Can someone please reccommend a good way to terminate the following loop when the user hits enter twice?  Currently the only way to exit is to user ctrl+d.

#include <stdio.h>
#include <ctype.h>

#define YES 1
#define NO  0

int main(void)

Variable Declarations

char string[101];
int c,
countChars = 0,
countLines = 0,
countTokens = 1,
countUpper = 0,
countLower = 0,
countDigits = 0,
countOther = 0,
charsPerLine = 0,
countBreak = 0;

printf("Counts the number of characters, lines and words\n");

Start of infinite while loop

while ((c = getchar()) != EOF){

Get the character from std input and perform character count


Check for now lines and increment the line counter and reset
the charsPerLine variable

  if (c == '\n'){
   charsPerLine = 0;

Verify that chars per line does note excede 100

  if ( charsPerLine > 100){
   printf("ERROR - The maximum number of chars per line is 100\n\n");

Verify that chars per line does note excede 100

  if (countLines > 100){
   printf("ERROR - The Total number of lines cannot excede 100\n\n");

Calculate the number of tokens

  if (c == ' ' || c == '\n' || c == '\t'){
   newToken = YES;
    if (newToken == YES){
     newToken = NO;

Calculate the number of lower and upper case characters

 if ((isupper(c)) != 0)
 else if ((islower(c)) != 0)

Calculate the number of digits

 if ((isdigit(c)) != 0)

Calculate the number of special chracters

 if ((isdigit(c)) == 0 && (isalpha(c)) == 0)

end of while loop

printf("\n You entered %c %s and %d\n", c, string, strlen(string));
if ((c == '\n') && (strlen(string) == 0))
c = 026;

Print the Output

printf("Number of lines = %d\n", countLines);
printf("Number of tokens = %d\n", countTokens);
printf("Number of chars = %d\n", countChars);
printf("Number of upper-case chars = %d\n", countUpper);
printf("Number of lower-case chars = %d\n", countLower);
printf("Number of digits = %d\n", countDigits);
printf("Number of chars other than chars and digits = %d\n", countOther);
return (0);

end of main

Question by:Dargie
1 Comment

Accepted Solution

newmang earned 30 total points
ID: 6320264
Why not store the last character read in a variable and then when a new character is read check to see if both the new character and the last character are both newlines. If so then break; the loop. Something like this perhaps....

char lastchar=0x00;
while ((c = getchar()) != EOF){

if(c=='\n' && lastchar=='\n')

Cheers - Gavin

Featured Post

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Preface I don't like visual development tools that are supposed to write a program for me. Even if it is Xcode and I can use Interface Builder. Yes, it is a perfect tool and has helped me a lot, mainly, in the beginning, when my programs were small…
Windows programmers of the C/C++ variety, how many of you realise that since Window 9x Microsoft has been lying to you about what constitutes Unicode ( They will have you believe that Unicode requires you to use…
The goal of this video is to provide viewers with basic examples to understand how to use strings and some functions related to them in the C programming language.
Video by: Grant
The goal of this video is to provide viewers with basic examples to understand and use nested-loops in the C programming language.

828 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question