Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.07.2013, 18:45   #1
Dondylion
Новичок
Джуниор
 
Аватар для Dondylion
 
Регистрация: 23.07.2013
Сообщений: 1
Вопрос Ошибка в коде (С++)

Дали задание найти ошибку в коде. Уже неделю бьюсь - не понимаю, что эта штуковина ДОЛЖНА делать. Она просто выводит на экран числа от 0 до 99999. Посмотрите кому не лень. Там всего-то 40 строк.. Аж просить стыдно.

Код:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>

using namespace std;

char * formated_string ( const char * arg )
{
    char buf[13];
    const int number=13;
    sprintf(buf,"%d:%s", number, arg);
    return buf;
}

bool is_numbers_equal(double number1, double number2)
{
    return number1==number2;
}

int main()
{
    char *buffer=new char[10];
    for (int i=0; i<=10; i++)
    {
        *buffer++=i+48;
        cout << is_numbers_equal(buffer[i-1], 50) << endl;
    }
    cout << buffer << endl;
    cout << formated_string(buffer) << endl;
    unsigned long j=10;
    for (unsigned short i=1; j<100000L; i++, j++)
    {
        cout << j/1 << endl;
    }
    return 0;
}

Последний раз редактировалось Dondylion; 23.07.2013 в 18:51.
Dondylion вне форума Ответить с цитированием
Старый 23.07.2013, 19:22   #2
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

избавься от магических чисел.
у тебя явно кривой цикл:
Код:
char *buffer=new char[10];
    for (int i=0; i<=10; i++)
посмотри, при i = 0, тут:
cout << is_numbers_equal(buffer[i-1], 50) << endl;
ты юзаешь отрицательный индекс

Чето не то ты делаешь тут:
*buffer++=i+48;
у тебя увеличивается значение ссылки (переходишь к следующему элементу) buffer, возвращается старое значение (предыдущий элемент) и в этот элемент помещается i+48 (опять же, избавься от магических чисел)
Когда после этой операции ты дергаешь buffer[i-1] - получишь прикольные эффекты - теперь buffer ссылается не на начало массива - тыж выполнил ++

Код:
(buffer[i-1], 50) // почему 50, а не 40 ? - избавься от магических чисел
cout << buffer << endl; // в конец строки забыл впихунть терминальный символ

Код:
bool is_numbers_equal(double number1, double number2)
{
    return number1==number2;
}
В функцию ты передаешь char, а не double.
Сравнивать дробные числа так, как это делаешь ты нельзя (они никогда не равны, есть погрешности округления).

Код:
char buf[13];
    const int number=13;
13 - потому что чертова дюжина?

Цитата:
Код:
unsigned long j=10;
    for (unsigned short i=1; j<100000L; i++, j++)
    {
        cout << j/1 << endl; // зачем делить на 1?
    }
Код:
#include <string.h>
#include <math.h>
это зачем?

Код:
return 0; // это ненужно
Код:
char *buffer=new char[10];
и память бежит

Последний раз редактировалось rrrFer; 23.07.2013 в 19:24.
rrrFer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка в коде fygas1991 C# (си шарп) 1 04.02.2013 23:56
Где ошибка в этом исходном коде на языке Си? Или ошибка в Excel? ArchiCurtis Помощь студентам 2 07.04.2012 14:16
ошибка в коде sanya94 Общие вопросы C/C++ 15 12.01.2011 19:26
Ошибка в коде, ошибка в css или это проблема с совместимостью с браузерами? ankris HTML и CSS 5 23.11.2010 16:58
ошибка в коде ZhukSTReeT Общие вопросы C/C++ 6 30.08.2010 00:42