Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
gaporf
0 / 0 / 2
Регистрация: 20.02.2016
Сообщений: 9
#1

Fgets некорректный результат - C++

08.03.2016, 11:05. Просмотров 260. Ответов 2
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
bool password();
int main ()
{
    if(password()) cout << "Вход разрешен. \n";
    else cout << "В доступе отказано. \n";
    
    return 0;
}
bool password()
{
    char s[80], s1[80];
    cout << "Введите пароль: ";
    fgets(s, 80, stdin);
    strcpy(s1, "пароль");
    if (strcmp(s, s1))
    {
        cout << "Пароль недействителен. \n";
        return false;
    }
    return true;
}
Нужно сравнить строки s и s1. Даже если я присвою строке s слово "пароль" то функция password() возращает значение ЛОЖЬ. Я понял, что при присваивании строке s слова "пароль" её длина будет 13, тогда как у строки s1 длина 12. Как исправить?
P.S. функцию gets() компилятор использовать запрещает с ошибкой: "warning: the 'gets' function is dangerous and should not to be used".
http://www.cyberforum.ru/cpp-beginners/thread1625577.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.03.2016, 11:05
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Fgets некорректный результат (C++):

Некорректный результат в программе на C++
Программа в цикле прибавляет к нынешней переменной её предыдущее значение. Но...

Класс выводит некорректный результат
Написал класс &quot;massiv&quot;, к нему несколько методов и все работает отлично....

Арифметические действия над массивами. Некорректный результат
Всем привет, что я не так делаю хочу от массива &quot;4&quot; отнять массивa &quot;1&quot; но...

Не могу разобраться в коде. Некорректный результат работы программы
Ввести с клавиатуры числа x, E . Последовательность a,a....a образована по...

fgets и CString
Здравствуйте, У меня возник вопрос, проконсультируйте, пожалуйста, что можно...

2
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4372 / 2347 / 654
Регистрация: 18.10.2014
Сообщений: 3,996
09.03.2016, 02:38 #2
Цитата Сообщение от gaporf Посмотреть сообщение
Я понял, что при присваивании строке s слова "пароль" её длина будет 13, тогда как у строки s1 длина 12. Как исправить?
Это откуда взялись такие значения??? С чего бы это вдруг строка "пароль" будет иметь длину 13? (Или 12).

Также не забывайте, что функция 'fgets' включает в результат символ перевода строки. Поэтому такого равенства строк у вас никогда не получится, так как вы сравниваете со строкой без символа перевода. Сначала почистьте результат 'fgets' (уберите перевод строки в конце), а потом уже сравнивайте.
1
gaporf
0 / 0 / 2
Регистрация: 20.02.2016
Сообщений: 9
09.03.2016, 13:21  [ТС] #3
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Также не забывайте, что функция 'fgets' включает в результат символ перевода строки. Поэтому такого равенства строк у вас никогда не получится, так как вы сравниваете со строкой без символа перевода. Сначала почистьте результат 'fgets' (уберите перевод строки в конце), а потом уже сравнивайте.
Спасибо, я просто строке s1 присвоил значение "пароль\n" и теперь при правильном вводе возвращает значение ИСТИНА.

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Это откуда взялись такие значения??? С чего бы это вдруг строка "пароль" будет иметь длину 13? (Или 12).
"Длину" строки получил оператором strlen, который на самом деле выводит размер в байтах. Из-за разных типов кодировок все символы, которые имеют номера от 0 до 127 в таблице ASCII кодах занимают 1 байт, а остальные символы, которые компилятор кодирует уже в UNICODE, занимают по 2 байта, из-за этого и выдавал весьма замечательный результат компилятор.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2016, 13:21
Привет! Вот еще темы с решениями:

Не работает fgets
Код еще не написан, но появилась какая-то проблема...ЧТо я делаю не так? ...

Stdio с fgets, stdin
Здравствуйте, нужна помощь с библиотекой stdio, проблема заключается в том, что...

Использование оператора fgets
Помогите решить задачу, пожалуйста, с использованием функции fgets. В...

Использование функции fgets
Передо мной встала следующая проблема - не могу понять, как работает функция...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru