2015-03-11 4 views
2

Не понимаю, почему ничего не появляется на экране, когда я запускаю эту маленькую программу? Является ли цикл while даже началом?Возникли проблемы с циклами

#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    char word[20]; 
    char TryAgain[20] = "y"; 
    int WordLength = 0; 

    while (strcmp(TryAgain, "y")) 
    { 
    printf("\t\t\t Word \n\n"); 
    printf("What is your word, bird?\n"); 
    scanf("%s", word); 
    getchar(); 

    WordLength = strlen(word); 

    printf("Result: "); 
    for (int i = 0; i < WordLength; ++i) 
    { 
     printf("%c*", word[i]); 
    } 
    printf("\nWould you like to try another word? [y/n]\n"); 
    scanf("%s", TryAgain); 
    } 

    getchar(); 
    return 0; 
} 
+1

Добро пожаловать в StackOverflow, но будьте готовы к критике, если вы помечаете вопрос как ** C++ ** и ** c **. Вам действительно нужно установить, какой язык вы используете, потому что они не на 100% совместимы ... но, кроме того, способ мышления о проблемах совершенно другой, причем C++ является гораздо более абстрактным и высокоуровневым. * (Например, в C++ ваша ошибка здесь не произойдет, потому что вы будете использовать строковый класс, который позволит вам использовать оператор равенства a la 'while (TryAgain ==" y ")', например.) * – HostileFork

+0

Поскольку вы отметили это как C++, вы должны переключиться на использование 'std :: string' для текстовых строк вместо проблемной строки C-style (нуль-конец символьной последовательности). –

ответ

5

strcmp возвращает 0, если ее аргументы одинаковы, поэтому на первой итерации ваш цикл в то время как проверка while(0). 0 эквивалентно false в булевых проверках, поэтому цикл while пропускается. Попробуйте while(!strcmp(TryAgain, "y")).

+0

@ user2836816 Существует кнопка подтверждения, чтобы проверить решение, когда оно решает вашу проблему ... это общий способ поблагодарить людей. – HostileFork

+0

@HostileFork Я думаю, что OP знает о знаке принятия, так как он уже принял другой ответ на другой вопрос, и есть период отсрочки в 15 минут, когда OP должен ждать, пока он не сможет принять ответ – Rizier123

+0

@ Rizier123 А, 15 минут. Забыл об этом. Благодарю. – HostileFork

0

Я предпочитаю, чтобы изменить его делать-то время

do { 
    printf("\nWould you like to try another word? [y/n]\n"); 
    scanf("%s", TryAgain); 
} while (TryAgain=="y" || TryAgain=="Y"); 

TryAgain должен быть логическим значением. см. Ya

+0

За исключением факта, что он не работает! Вы не можете использовать '==' для проверки равенства строк C, поскольку он просто проверяет, равны ли указатели. – HostileFork

+0

hm? ах да, lol моя ошибка, извините –

+0

Нет времени, как настоящий, чтобы отредактировать и исправить :-) – HostileFork

Смежные вопросы