Другие языки программирования и технологии

В чём ошибка? СИ

#include
int main() {
int a, b, c;
char x;
printf ("ВВЕДИТЕ ПАРОЛЬ:") ;
scanf("%s", &x);
if ("%s == пароль", x)
printf("РАЗРЕШЕНО");
else
printf("ЗАПРЕЩЕНО") ;
return 0;
}
НЕ ОБРАЩАЙТЕ ВНИМАНИЕ НА ДРУГИЕ ПЕРЕМЕННЫЕ.
При неправильном пароле он тоже вводит РАЗРЕШЕНО.
Владимир Шол
Владимир Шол
7 938
Во первых у тебя объявлена переменная x типа char который может хранить ток один символ.

В Си строкового типа не существует, и чтобы сохранить строку необходимо создать символьный массив типа char, например char x[101] создаёт символьный массив с возможностью сохранения до 100 символов, любая строка в си в конце имеет NULL-символ указывающий на конец строки, выглядит он вот так '\0' явно указывать его не нужно, компилятор сам всё сделает, это нужно знать для того чтобы при создании символьного массива, учесть размер и для этого символа.

Во вторых ты неправильно прописал условие.
if ("%s == пароль", x)

Си просто так не даст сравнить две разные строки, при попытки сравнить строки вот так if (s1 == s2) он на самом деле сравнивает не строки, а их адреса в памяти компьютера, а именно адрес первого символа первой строки, адрес первого символа первой строки может быть таковым 0x689ADF а у второй строки 0x789DF в итоге получается вот такое сравнение 0x689ADF == 0x789DF в итоге они не равны даже если обе переменные будут иметь одно и тоже значение.

Для сравнение строк есть функция strcmp для этого нужно подключить библиотеку string.h для подробной информации есть документация cppstudio.com/post/707/
CN
Cevair Nehir
129
Лучший ответ
Владимир Шол Так если прописать так и вписать слово то он же всё равно выведет.
char x;
scanf("%s", x) ;
printf("%s", &x);
Вот эта конструкция делает что угодно, но не то, что ты подумал:

if ("%s == пароль", x)
Владимир Шол А как сделать так что я подумал??