Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/14: Рейтинг темы: голосов - 14, средняя оценка - 4.64
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
1

Баг strcmp

27.11.2010, 18:57. Показов 2601. Ответов 33
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Линк на архив с видео, где записана ошибка.
http://upload.com.ua/get/902136351/Bug.zip
Пароль: bug
Объясните ситуацию.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.11.2010, 18:57
Ответы с готовыми решениями:

std::regex : баг на сайте или баг компилятора?
http://en.cppreference.com/w/cpp/regex/regex_match этот код выкидывает throw... Добавлено через...

Баг asio? или баг TCP стека?
всем привет. повстречался с очень странным багом. и не могу определить кто бажит, asio, или...

strcmp
Вот изучаю С++, тут столкнулся с простой проблеммой, функция strcmp,которая проверяет на равенство...

strcmp()
#include "stdafx.h" #include <iostream> #include <cstdio> #include <cstring> using namespace...

33
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
28.11.2010, 04:50 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от silent_1991 Посмотреть сообщение
Я на то и сетовал
Так вроде бы так и должно быть, https://www.cyberforum.ru/cgi-bin/latex.cgi?\sqrt{1} = 1, я не прав?
0
silent_1991
28.11.2010, 11:33
  #22

Не по теме:

Nameless One, да шучу я, сказал же))) Он считает так же неправильно, как и strcmp у ТСа. Надо же было поглумиться))
P.S. А вообще это откуда - наш препод по терверу как-то рассказывал, как он спросил у потока (вроде экономистов), чему равен арифметический квадратный корень из 1... Так вот его цитата: "Они долго считали, да, очень долго... И потом один выдал: "Нууу... Примерно 0,97 получается""

1
Nameless One
28.11.2010, 11:51
  #23

Не по теме:

:D у нас про экономистов в универе тоже анекдоты ходят...

0
silent_1991
28.11.2010, 11:56
  #24

Не по теме:

Nameless One, Угу, а потом мы удивляемся почему так хорошо и богато живём... А потому что экономисты всё преуменьшить норовят, вон даже корень из 1 на три сотых недобрали...

0
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
28.11.2010, 13:09  [ТС] 25
Ребята, посмотрите видео, на 50-й секунде на паузе чётко видно, что s содержит "X", str содержит "O".
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
28.11.2010, 13:10 26
alexsvk, ага, зато s не содержит '\0'
0
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
28.11.2010, 13:28  [ТС] 27
Цитата Сообщение от Nameless One Посмотреть сообщение
alexsvk, ага, зато s не содержит '\0'
И опять же, на видео видно, что s[0] = буква, s[1]='\0';
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
28.11.2010, 13:31 28
Не знаю, видео твое не смотрел, но сам ты написал:
Цитата Сообщение от alexsvk Посмотреть сообщение
Debug:
s[0] = 'X';
s [1] = 'O';
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
28.11.2010, 13:36 29
alexsvk, ты можешь чётко пояснить, что ты хочешь в конечном итоге? Если нужно определить НЕравенство строк, то вместо

C
1
if (strcmp(str,s) == true)
надо писать

C
1
if (strcmp(str,s))
0
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
28.11.2010, 13:45  [ТС] 30
Evg, а true не годится?

Добавлено через 35 секунд
Цитата Сообщение от Nameless One Посмотреть сообщение
Не знаю, видео твое не смотрел, но сам ты написал:
писал же, что описка была. s[1]='\0';
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
28.11.2010, 13:54 31
Цитата Сообщение от alexsvk Посмотреть сообщение
Evg, а true не годится?
С чего и следовало начать:
strcmp возвращает отрицательное число, когда первая строка меньше второй, 0, когда они равны, положительной число, когда первая строка больше второй. Она возвращает не bool, а int. Матчасть надо учить.
Блин, а я ведь спрашивал уже:
Цитата Сообщение от Nameless One Посмотреть сообщение
alexsvk, а теперь скажи, какие значения аргументов у функции strcmp в момент "бага" и какой результат ты от нее ожидаешь (str равна s, str больше s, str меньше s)?
Разве так трудно было сразу четко и ясно ответить?

Цитата Сообщение от alexsvk Посмотреть сообщение
Evg, а true не годится?
Чтобы совсем не было сомнений, скажи, что выдаст эта программа:
C++
1
2
3
4
5
6
7
#include <iostream>
 
int main()
{
        std::cout << std::boolalpha << (((int) -1) == true) << std::endl;
        return 0;
}
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
28.11.2010, 13:55 32
Цитата Сообщение от alexsvk Посмотреть сообщение
Evg, а true не годится?
Я мог бы ответить на этот вопрос коротко: "нет". Но если тебе действительно интересно понять, почему так (хотя в теме уже несколько раз об этом сказали), то тебе придётся ответить на встречный вопрос: "а с чего ты решил, что годится?"
0
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
28.11.2010, 22:02  [ТС] 33
Цитата Сообщение от Nameless One Посмотреть сообщение
С чего и следовало начать:
strcmp возвращает отрицательное число, когда первая строка меньше второй, 0, когда они равны, положительной число, когда первая строка больше второй. Она возвращает не bool, а int. Матчасть надо учить.
Блин, а я ведь спрашивал уже:Разве так трудно было сразу четко и ясно ответить?


Чтобы совсем не было сомнений, скажи, что выдаст эта программа:
C++
1
2
3
4
5
6
7
#include <iostream>
 
int main()
{
        std::cout << std::boolalpha << (((int) -1) == true) << std::endl;
        return 0;
}
false
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
28.11.2010, 22:07 34
Цитата Сообщение от alexsvk
false
И следовательно?..
0
28.11.2010, 22:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.11.2010, 22:07
Помогаю со студенческими работами здесь

strcmp
Не могу понять, как правильно прировнять два слова. КОгда компилирую и ввожу слово, програма...

STRCMP
Как работает функция strcmp? strncmp? while(L&lt;R) { ...

strcmp
slovo={'d','d','d'}; char *slovo2=new char; for(int i=0;i&lt;k;i++) { cin&gt;&gt;slovo2; } int...

Strcmp
Пользуюсь Visual Studio 2013. Читай книжку, выполняю примеры. Там есть пример с использованием...


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

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru