Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
#1

Баг strcmp - C++

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

Линк на архив с видео, где записана ошибка.
http://upload.com.ua/get/902136351/Bug.zip
Пароль: bug
Объясните ситуацию.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2010, 18:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Баг strcmp (C++):

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

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

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

Strcmp - C++
Пользуюсь Visual Studio 2013. Читай книжку, выполняю примеры. Там есть пример с использованием strcmp и сказано подключить <cstring>. У...

strcmp() - C++
#include "stdafx.h" #include <iostream> #include <cstdio> #include <cstring> using namespace std; int main() { ...

strcmp - C++
slovo={'d','d','d'}; char *slovo2=new char; for(int i=0;i<k;i++) { cin>>slovo2; } int s=strcmp(slovo2,slovo); и ввожу...

33
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
27.11.2010, 20:49 #16
Кстати, непонятно, как могло измениться значение s[1], которое вроде было равно '\0', если с момента начальной инициализации оно не менялось (вроде бы)? Если только функция setCellValue модифицирует значение s... Если это твоя функция, попробуй изменить тип параметра с char* на const char*.
0
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
27.11.2010, 21:54 #17
Цитата Сообщение от Nameless One
А как должно быть правильно?
Это уже другой вопрос

Цитата Сообщение от Nameless One
а у меня выводит единицу
Я на то и сетовал
0
accept
4825 / 3246 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
28.11.2010, 01:05 #18
Цитата Сообщение от silent_1991 Посмотреть сообщение
Я заметил - log(-1) неправильно считает.

Добавлено через 1 минуту
И ещё sqrt(x) == x при x = 1 почему-то...
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <math.h>
#include <errno.h>
 
int main(void)
{
    double n = log(-1);
    
    printf("%f" "\n", n);
    
    if (errno)
        perror("math");
    
    printf("%d" "\n", sqrt(1.0) == 1.0);
        
    return 0;
}
Код
[guest@localhost tests]$ ./t
nan
math: Numerical argument out of domain
1
[guest@localhost tests]$
C89
4.5.1 Treatment of error conditions

The behavior of each of these functions is defined for all
representable values of its input arguments. Each function shall
execute as if it were a single operation, without generating any
externally visible exceptions.

For all functions, a domain error occurs if an input argument is
outside the domain over which the mathematical function is defined.
The description of each function lists any required domain errors; an
implementation may define additional domain errors, provided that such
errors are consistent with the mathematical definition of the
function./94/ On a domain error, the function returns an
implementation-defined value; the value of the macro EDOM is stored in
errno .

Similarly, a range error occurs if the result of the function
cannot be represented as a double value. If the result overflows (the
magnitude of the result is so large that it cannot be represented in
an object of the specified type), the function returns the value of
the macro HUGE_VAL , with the same sign as the correct value of the
function; the value of the macro ERANGE is stored in errno . If the
result underflows (the magnitude of the result is so small that it
cannot be represented in an object of the specified type), the
function returns zero; whether the integer expression errno acquires
the value of the macro ERANGE is implementation-defined.
Добавлено через 4 минуты
Цитата Сообщение от Nameless One Посмотреть сообщение

Не по теме:

Кстати, asin(x) для |x|>1 только у меня не работает?

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <math.h>
#include <errno.h>
 
int main(void)
{
    double n = asin(2);
    
    printf("%f" "\n", n);
    
    if (errno)
        perror("math");
    
    return 0;
}
Код
[guest@localhost tests]$ ./t
nan
math: Numerical argument out of domain
[guest@localhost tests]$
0
silent_1991
28.11.2010, 01:07
  #19

Не по теме:

accept, если что, это всё был сарказм)))

0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
28.11.2010, 01:19 #20
Гм. Для снятия константности лучше использовать const_cast<char*> но т.к. тут нету константности, то смысла в использовании нет. Да и потом. ТС, ты может все таки объяснишь, что ты хочешь получить от сравнения строк?
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
28.11.2010, 04:50 #21
Цитата Сообщение от silent_1991 Посмотреть сообщение
Я на то и сетовал
Так вроде бы так и должно быть, http://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

Не по теме:

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

0
silent_1991
28.11.2010, 11:56
  #24

Не по теме:

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

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

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

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

Добавлено через 35 секунд
Цитата Сообщение от Nameless One Посмотреть сообщение
Не знаю, видео твое не смотрел, но сам ты написал:
писал же, что описка была. s[1]='\0';
0
28.11.2010, 13:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2010, 13:45
Привет! Вот еще темы с ответами:

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

[Visual C++]strcmp() - C++
Нужно слова, которые считываются в буфер stroka, отсортировать по алфавиту с пом. strcmp. Ошибка в том, что в условии if (strcmp(...

реализация strcmp - C++
помогите написать реализацию strcmp Функция должна принимать два указателя на сравниваемые строки (возможно Вы должны указать...

strcmp не работает! - C++
Ниже изложенная функция должна проверять не выходит ли за данный диапазон введенное число. Загвоздка вот в чем: strcmp сравнивает строки...


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

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

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