2013-11-20 4 views
-1

У меня есть эта простая программа, которую я хочу проверить сам, и она в основном считывает из символов терминала и подсчитывает, сколько введенных символов нижнего регистра.C застрял в бесконечном цикле

В функции, которую я вызвал, чтобы сделать это, кажется, она просто работает навсегда в цикле.

/* 
Create a function that reads the number of lower case letters from the user 
*/ 

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

void CopyMe(char []); 

main() 
{ 
    char letters [100]; 
    int i = 0; 
    do 
    { 
     letters [i++] = getchar(); 
    } 
    while (letters [i-1] != '\n'); 
    letters [i-1] = '\0'; 

    CopyMe(letters); 

    printf("Done \n"); 
    system("pause"); 
    return 0; 
} 

void CopyMe(char a[]) 
{ 
    int lowercase = 0; 
    int i=0; 
    while (a[i] != '\0') 
    { 
     if (a[i] >= 'a' && a[i] <= 'z') 
     { 
      lowercase++; 
     } 
    } 
    printf("Lowercase: %d \n", lowercase); 
} 
+1

Используйте отладчик для пошагового цикла. Причина должна быстро стать ясной. –

+1

Вы не можете ошибиться в 'for (i = 0; i ugoren

+0

В любое время, когда цикл, кажется, «работает вечно», вам может потребоваться проверить условие цикла и определить, что-нибудь в теле цикла когда-либо изменит его. – WhozCraig

ответ

2

Вы никогда не увеличиваете i в вашей CopyMe функции, так что цикл, никогда не заканчивается, всегда работает на a[0].

2

вы забыли увеличивает переменную я ...

+0

в CopyMe ... Просто используйте для петель ffs –

1

Вы не увеличивающиеся i в CopyMe:

void CopyMe(char a[]) 
{ 
    int lowercase = 0; 
    int i=0; 
    while (a[i] != '\0') 
    { 
     if (a[i] >= 'a' && a[i] <= 'z') 
     { 
      lowercase++; 
     } 
     i++; // <------- Don't forget about meeeeeee!!! 
    } 
    printf("Lowercase: %d \n", lowercase); 
} 
Смежные вопросы