Я получаю предупреждение: «Всегда верно сравнение константы« 10 »с логическим выражением» - PullRequest
1 голос
/ 06 мая 2020

Я не могу выйти из l oop, введя новую строку.

int input(char str[], int n)
{
    int ch, i = 0;
    while ((ch == getchar()) != '\n')
        if (i < n)
            str[i++] = ch;
    str[i] = '\0';
    return i;
}

Ответы [ 3 ]

4 голосов
/ 06 мая 2020

Просто замените == на =, потому что вы хотите присвоить getchar() ch, а не сравнивать его.

int input(char str[], int n)
{
    int ch, i = 0;
    while ((ch = getchar()) != '\n'){
        if (i < n)
            str[i++] = ch;
    }
    str[i] = '\0';
    return i;
} 
0 голосов
/ 06 мая 2020
(ch == getchar())

Вы используете == вместо =.

== используется как логический оператор для проверки того, равен ли левый операнд правому.

Таким образом , l oop никогда не завершится, потому что вы сравниваете 0 или 1 (что является результатом (ch == getchar()) с \n, значение ASCII которого равно 10.

Вот что ошибка говорит.

= используется для назначения и требуется для присвоения символа, полученного getchar(), ch.


Это исправленная версия:

while ((ch = getchar()) != '\n') {
     if (i < n)
     str[i++] = ch;
}
0 голосов
/ 06 мая 2020

Йо забыл { символов в вашем коде. Любая управляющая структура, такая как while и if из более чем одной строки команд, должна быть закодирована следующим образом:

while(condition){
  instruction 1;
  instruction 2;
  ...
}

Кстати, ваш i всегда равен 0, а ваш n не изменяется в вашей функции.

РЕДАКТИРОВАТЬ: на причину, по которой вы получили предупреждение, ответил кто-то другой.

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