Последний оператор "if" не работает, когда я запускаю программу - PullRequest
3 голосов
/ 24 апреля 2020

Каждый раз, когда я запускаю программу, последний оператор «если» не работает, это означает, что если я введу «нет», l oop не будет прерываться. Может кто-нибудь помочь мне здесь?

#include <stdio.h>

int main() {
  int age, i;
  char ans;

  for (i = 0; i < 3; i++) {
    printf("\n enter your age:");
    scanf("%d", &age);

    if (age > 18) {
      printf("your age is %d, you are allowed to enter", age);
    } else if (age == 18) {
      printf("I don't know what to do with you");
    } else {
      printf("your age is %d, you are not allowed to go in", age);
    }

    printf("\n continue?");
    scanf(" %c", &ans);

    if (ans == 'no') {  // <-- here
      break;
    } else {
      continue;
    }
  }

  return 0;
}

Ответы [ 3 ]

5 голосов
/ 24 апреля 2020

используйте if (ans == 'n'). Если вы хотите использовать слово "no", вам нужно изменить тип переменной ans на массив символов и использовать метод strcmp() для сравнения строк.

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

В c программирование одинарных кавычек (т. Е. c) используется для символов, а двойных кавычек (т. Е. c) - для строк. В двойных кавычках последний символ равен NULL.

Примечание. Мы не можем хранить два символа в одинарных кавычках, например 'no'.

В вашем случае, во-первых, объявите ans как массив символов (т.е. строку) .

char ans[SIZE_AS_PER_REQUIREMENT];

Чтобы получить входные данные ,

scanf("%s",ans);

Для улучшения взаимодействия с пользователем перед вводом введите правильное сообщение для пользователя.

printf("\n Do you want to continue(yes/no)?");

Теперь, чтобы сравнить ответ пользователя с условием программы, у нас есть C -языковая строковая библиотека (то есть string.h ), включите ее перед использованием любой встроенной строковой функции C -языкового языка.

#include <string.h>

и использовать любую из строковых функций strcmp или stricmp согласно требованию. Здесь я собираюсь использовать stricmp , поскольку возможно, что пользователь может ввести «нет» / «нет» / «нет». stricmp игнорирует регистр.

stricmp(string1,string2)

Возвращает

  • Отрицательное число, если string1 меньше string2
  • Ноль, если string1 эквивалентно string2
  • Положительное число, если строка1 больше, чем строка2

Итак, в нашем случае мы проверяем на ноль.

См. Программу ниже, я только что добавил их в ваш код.

#include <stdio.h>
#include <string.h>
int main() {
  int age, i;
  char ans[5];//declare ans as character array

  for (i = 0; i < 3; i++) {
    printf("\n enter your age:");
    scanf("%d", &age);

    if (age > 18) {
      printf("your age is %d, you are allowed to enter", age);
    } else if (age == 18) {
      printf("I don't know what to do with you");
    } else {
      printf("your age is %d, you are not allowed to go in", age);
    }

    printf("\n Do you want to continue(yes/no)?");
    scanf("%s",ans);//take input as string in ans, its character array

    if (stricmp(ans,"no") == 0) {  // 0 means both are equal
      break;
    } else {
      continue;
    }
  }

  return 0;
}
0 голосов
/ 24 апреля 2020

Вы использовали %c для символов. Вместо этого используйте %s.

...