понять мою логику в то время как делать, если код в с?37 строк / пробелов кода - PullRequest
0 голосов
/ 11 января 2011

Код, который я пишу, - это, по сути, вопрос о том, чтобы попросить пользователя ввести там свое имя. Если имя пустое, т. Е. Пользователь забывает ввести там свое имя, тогда в коде будет упомянуто, что пользователь забыл ввести там имя, и спросить снова. Следует продолжать спрашивать, пока условие не будет выполнено.

// This sample compares user input to what is being typed. If the 
// input is void of any charicters before pressing enter, it will print a reply. 

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

int main()
{
    char firstname[25];

    printf("Please enter your first name:");
    fgets(firstname,25,stdin);

    // ask to enter in a name. If no name or text is present,
    // will reply with no name entered
    // and will loop untill a name is pressed and entered

    do
    { 
        printf("You pressed enter before entering your first name.\n Please enter first name");             
    }
    while (firstname == NULL || strcmp(firstname,"")==0);

    if(!strcmp(firstname, "firstname"))
    {
        printf("Thank you %s! for entering in your first name",firstname);
    }

    getchar();
}

Он зацикливается только один раз. Так что, не уверен, почему это не будет продолжаться, а также, разорвать цикл, чтобы сказать "thank you %s! Кто-нибудь может привести другой пример, чтобы он работал, и я могу понять это лучше?

Ответы [ 3 ]

1 голос
/ 11 января 2011

В цикле do...while у вас есть только один оператор printf, который не меняет условия цикла. Рассмотрите возможность перемещения линии fgets(firstname,25,stdin) внутри цикла.

0 голосов
/ 11 января 2011

Как упомянул Благовест Буюклиев, вам нужно переместить свои миниатюры в цикл. Кроме того, fgets будет содержать возвращаемый символ в строке (см. здесь ), поэтому вызов для сравнения с "" не будет работать так, как вы ожидаете.

Вы можете сравнить его с "\ n". Или используйте получает , что не включает перевод строки.

Кроме того, на самом деле нет причин проверять firstname по NULL, это переменная стека и никогда не будет NULL. И, в конце, ваш printf будет выполняться только в том случае, если чье-то имя в буквальном смысле «имя», так как вы сравниваете это.

0 голосов
/ 11 января 2011

Не совсем та проблема, с которой вы столкнулись, но с ней вы скоро столкнетесь:

if(!strcmp(firstname, "firstname")) 

strcmp возвращает 0, если строки равны, и возвращает положительное или отрицательное значение, если они

Это означает, что если вы попытаетесь интерпретировать результат как логическое значение, strcmp вернет true, если строки отличаются , и false, если они являются то же самое .

Вы видите проблему в указанной строке сейчас?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...