почему мое состояние пока не работает? - PullRequest
0 голосов
/ 21 апреля 2020

Я делаю программу, которая принимает название напитка, его тип, его количество и цену в качестве входных данных. Длина имени должна быть от 5 до 20 символов, количество должно быть от 1 до 100, а цена должна быть от 10000 до 20000. Я сделал условия, но условие do while для имени, количества и цена не работает. Может кто-нибудь сказать мне, в какой части я делаю ошибки?

do{
    printf("Insert item name: ");
    scanf(" %[^\n]s",   strcpy(newNode->drink, drink));
    len = strlen(drink);
}while(len<5 && len>20);

do{
    printf("Type of coffee [ yes/no ]: ");
    scanf(" %[^\n]s", strcpy(newNode->type, type));
}while(strcmp(newNode->type, "yes")!=0 && strcmp(newNode->type, "no")!=0 );

do{
    printf("Insert the quantity of the item: ");
    scanf("%d", &newNode->quantity); 
}while(newNode->quantity < 1 && newNode->quantity > 100);

do{
    printf("Insert the price of the item: ");
    scanf("%d", &newNode->price);
}while(newNode->price < 10000 && newNode->price>200000);

Когда я ввожу имя ниже 5 или выше 20, оно все равно переходит к следующему вводу, не спрашивая название нового напитка. Это также происходит с количеством и ценой.

Ответы [ 2 ]

0 голосов
/ 21 апреля 2020

Я увидел что-то не так в коде:

Когда я прочитал весь код, я увидел ту же ошибку со всеми Do - При замене AND на OR, тогда вы должны положить strcpy из scanf, как пример кода .

 do{
        printf("Type of coffee [ yes/no ]: ");
        scanf(" %[^\n]s", strcpy(newNode->type, type)); // strcpy have to use after the scanf and not in the same time.
    }while(strcmp(newNode->type, "yes")!=0 && strcmp(newNode->type, "no")!=0 );

заменить на:

scanf(" %[^\n]s", type); strcpy(newNode->type, type); 
/* Store data inside type, then copy inside newNode->type */

Строка while с двумя условиями AND

}while(strcmp(newNode->type, "yes")!=0 && strcmp(newNode->type, "no")!=0 );

Это означает: newNode-> type = yes AND newNode -type = no

newNode не может иметь два значения одновременно, лучше использовать «ИЛИ», как показано в следующем коде:

}while(strcmp(newNode->type, "yes")!=0 || strcmp(newNode->type, "no")!=0 ); 

0 голосов
/ 21 апреля 2020

Вы неправильно указали свои условия в коде, сделайте это ниже:

 do{
    printf("Insert item name: ");
    scanf(" %[^\n]s",   strcpy(newNode->drink, drink));
    len = strlen(drink);
  }while(len>5 && len<20);

    do{
        printf("Type of coffee [ yes/no ]: ");
        scanf(" %[^\n]s", strcpy(newNode->type, type));
    }while(strcmp(newNode->type, "yes")!=0 && strcmp(newNode->type, "no")!=0 );

    do{
        printf("Insert the quantity of the item: ");
        scanf("%d", &newNode->quantity); 
    }while(newNode->quantity > 1 && newNode->quantity < 100);

    do{
        printf("Insert the price of the item: ");
        scanf("%d", &newNode->price);
    }while(newNode->price > 10000 && newNode->price < 200000);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...