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

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

Войти
Регистрация
Восстановить пароль
 
neske
1495 / 862 / 82
Регистрация: 26.03.2010
Сообщений: 2,951
#1

Ошибка. - C++

27.06.2010, 22:23. Просмотров 355. Ответов 8
Метки нет (Все метки)

Добрый вечер!
Решаю задачу, при компиляции ошибок нет, но при запуске, они появляются.
Текст задачи и скриншот консоли прикреплены.

Листинг:

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
#include <ctime>
#define SIZE 512 // размер предложения.
#define number 5 // размер массива указателей.
#define number_words 6 // кол-во слов в предложении.
 
int rand ()
{
    return rand()%5;
}
 
int main ()
{
    char MAS[SIZE];
    char *article [number] = {"the", "a ", "one", "sone", "any"};
    char *noun [number] = {"boy", "girl", "dog", "town", "car"};
    char *verb [number] = {"drove", "jumped", "ran", "walked", "skipped"};
    char *preposition [number] = {"to", "from", "over", "under", "on"};
 
    srand (time (NULL));
    // first word
    strcat (MAS, *(article+rand()) );
    strcat (MAS, " ");
    // second word
    strcat (MAS, *(noun+rand()) );
    strcat (MAS, " ");
    // third word
    strcat (MAS, *(verb+rand()) );
    strcat (MAS, " ");
    // fourth word
    strcat (MAS, *(preposition+rand()) );
    strcat (MAS, " ");
    // fifth word
    strcat (MAS, *(article+rand()) );
    strcat (MAS, " ");
    // sixth word
    strcat (MAS, *(noun+rand()) );
    strcat (MAS, " .");
 
    std::cout << "Rezult: " << MAS;
    std::cout << std::endl;
 
    system ("pause");
    return 0;
}
0
Миниатюры
Ошибка.   Ошибка.  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.06.2010, 22:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка. (C++):

Выскакивает ошибка Stack around the voriable 'text' was corrupted. Подскажите пожалуйста в чём ошибка - C++
Выскакивает ошибка Stack around the voriable 'text' was corrupted. Подскажите пожалуйста в чём ошибка. #include &lt;iostream&gt; #include...

Ошибка в конструкторе с параметром. Компилятор не ругается, но при запуске программы возникает ошибка - C++
Я знаю точно, что ошибка в конструкторе с параметром. Компилятор не ругается, но при запуске моей программы windows выдает ошибку. Почему ?...

Ошибка при компиляции. Где ошибка? (Работа с классом) - C++
Уважаемые форумчане! При компиляции проекта возникает ошибка &quot; undefined reference to `MeterNZiF::MeterNZiF()' &quot; на 7 строку приложения. ...

Укажите где ошибка (ошибка во время выполнения программы) - C++
Здравствуйте, помогите пожалуйста найти ошибки в коде которые возникаю при выполнении программы Картинка с ошибкой внизу поста. Код: ...

Реализовать через тип данных структура. При сборке и отладки возникает ошибка. В чем ошибка? - C++
С++ в таблице из 5 строк хранятся данные о товарах: наименование, цена, количество. Определить и вывести наименование товара, цена которого...

Ошибка в коде (Ошибка сегментирования (core dumped) - C++
Добрый день. Подскажите пожалуйста, где ошибка в коде? char ch; string s; while ((ch = cin.get()) != '0' ) ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
neske
1495 / 862 / 82
Регистрация: 26.03.2010
Сообщений: 2,951
27.06.2010, 22:32  [ТС] #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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
#include <ctime>
#define SIZE 512 // размер предложения.
#define number 5 // размер массива указателей.
#define number_words 6 // кол-во слов в предложении.
 
int random ()
{
    return rand()%5;
}
 
int main ()
{
    char MAS[SIZE];
    char *article [number] = {"the", "a", "one", "sone", "any"};
    char *noun [number] = {"boy", "girl", "dog", "town", "car"};
    char *verb [number] = {"drove", "jumped", "ran", "walked", "skipped"};
    char *preposition [number] = {"to", "from", "over", "under", "on"};
 
    srand (time (NULL));
    // first word
    strcat (MAS, *(article+random()) );
    strcat (MAS, " ");
    // second word
    strcat (MAS, *(noun+random()) );
    strcat (MAS, " ");
    // third word
    strcat (MAS, *(verb+random()) );
    strcat (MAS, " ");
    // fourth word
    strcat (MAS, *(preposition+random()) );
    strcat (MAS, " ");
    // fifth word
    strcat (MAS, *(article+random()) );
    strcat (MAS, " ");
    // sixth word
    strcat (MAS, *(noun+random()) );
    strcat (MAS, ".");
 
    std::cout << "Rezult: " << MAS;
    std::cout << std::endl;
 
    system ("pause");
    return 0;
}
0
Миниатюры
Ошибка.  
neske
1495 / 862 / 82
Регистрация: 26.03.2010
Сообщений: 2,951
27.06.2010, 22:36  [ТС] #3
Всё! Решил проблему! Только не понял, почему недочет пропал.

Листинг:
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
#include <ctime>
#define SIZE 512 // размер предложения.
#define number 5 // размер массива указателей.
#define number_words 6 // кол-во слов в предложении.
 
int random ()
{
    return rand()%5;
}
 
int main ()
{
    char MAS[SIZE]={};
    char *article [number] = {"the", "a", "one", "sone", "any"};
    char *noun [number] = {"boy", "girl", "dog", "town", "car"};
    char *verb [number] = {"drove", "jumped", "ran", "walked", "skipped"};
    char *preposition [number] = {"to", "from", "over", "under", "on"};
 
    srand (time (NULL));
    // first word
    strcat (MAS, *(article+random()) );
    strcat (MAS, " ");
    // second word
    strcat (MAS, *(noun+random()) );
    strcat (MAS, " ");
    // third word
    strcat (MAS, *(verb+random()) );
    strcat (MAS, " ");
    // fourth word
    strcat (MAS, *(preposition+random()) );
    strcat (MAS, " ");
    // fifth word
    strcat (MAS, *(article+random()) );
    strcat (MAS, " ");
    // sixth word
    strcat (MAS, *(noun+random()) );
    strcat (MAS, ".");
 
    std::cout << "Rezult: " << MAS;
    std::cout << std::endl;
 
    system ("pause");
    return 0;
}
0
Миниатюры
Ошибка.  
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
27.06.2010, 22:53 #4
Цитата Сообщение от neske Посмотреть сообщение
Только не понял, почему недочет пропал.
char *strcat(char *s1, const char *s2);
Функция strcat добавляет копию строки, на которую указывает s2 (включая
завершающий нулевой символ) в конец строки, на которую указывает s1.
Начальный символ строки s2 записывается поверх нулевого символа в конце
строки s1. Если объекты перекрываются, поведение функции не определено.
Функция strcat возвращает значение s1.

Обрати внимание на выделенные участки. Изначально ты пытался добавить строку в неинициализированный массив, как по твоему где у него будет конец строки? И будет ли вообще?
1
neske
1495 / 862 / 82
Регистрация: 26.03.2010
Сообщений: 2,951
27.06.2010, 23:00  [ТС] #5
Да, понял
Но в задаче есть еще такой нюанс, предложение должно начинаться с большой буквы.
Решил эту проблему так:
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
#include <ctime>
#define SIZE 512 // размер предложения.
#define number 5 // размер массива указателей.
#define number_words 6 // кол-во слов в предложении.
 
int random ()
{
    return rand()%5;
}
 
int main ()
{
    char MAS[SIZE]={};
    char *article [number] = {"the", "a", "one", "some", "any"};
    char *noun [number] = {"boy", "girl", "dog", "town", "car"};
    char *verb [number] = {"drove", "jumped", "ran", "walked", "skipped"};
    char *preposition [number] = {"to", "from", "over", "under", "on"};
 
    srand (time (NULL));
    // first word
    strcat (MAS, *(article+random()) );
    strcat (MAS, " ");
    MAS[0]=char ((int) MAS[0]-32);
    // second word
    strcat (MAS, *(noun+random()) );
    strcat (MAS, " ");
    // third word
    strcat (MAS, *(verb+random()) );
    strcat (MAS, " ");
    // fourth word
    strcat (MAS, *(preposition+random()) );
    strcat (MAS, " ");
    // fifth word
    strcat (MAS, *(article+random()) );
    strcat (MAS, " ");
    // sixth word
    strcat (MAS, *(noun+random()) );
    strcat (MAS, ".");
 
    std::cout << "Rezult: " << MAS;
    std::cout << std::endl;
 
    system ("pause");
    return 0;
}
Но помоему, это не очень красиво. Да и темболее следующая задача, это усовершенствовать эту, то есть нужно составлять небольшие рассказы. Большая буква будет не только первая.
Хотел бы выслушать ваши варианты.

Добавлено через 51 секунду
Почему 32? Посмотрел в кодировки ANSI, там закономерность 8)
0
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
27.06.2010, 23:11 #6
Цитата Сообщение от neske Посмотреть сообщение
MAS[0]=char ((int) MAS[0]-32);
Приведение типов сдесь лишнее. Можно просто MAS[0]= MAS[0]-32;

Цитата Сообщение от neske Посмотреть сообщение
Почему 32? Посмотрел в кодировки ANSI
Это что за кодировка такая? В соответствии с таблицей ASCII разница между прописной и заглавной 32 или 0x20.
Цитата Сообщение от neske Посмотреть сообщение
нужно составлять небольшие рассказы. Большая буква будет не только первая.
Можно использовать два массива, один для предложения, другой для рассказа.
1
neske
1495 / 862 / 82
Регистрация: 26.03.2010
Сообщений: 2,951
27.06.2010, 23:17  [ТС] #7
И правда, работает 8)
На счет кодировки да, перепутал.

kazak, а как мне отчистить массив с предложением?
0
neske
1495 / 862 / 82
Регистрация: 26.03.2010
Сообщений: 2,951
27.06.2010, 23:27  [ТС] #8
Все, нагуглил 8)

Конечный вариант, может кому понадобиться

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <iostream>
#include <ctime>
#define SIZE 512 // размер предложения.
#define number 5 // размер массива указателей.
#define number_offer 10 // кол-во предложение
 
int random ()
{
    return rand()%5;
}
 
int main ()
{
    char text[SIZE*10]={};
    char MAS[SIZE]={};
    char *article [number] = {"the", "a", "one", "some", "any"};
    char *noun [number] = {"boy", "girl", "dog", "town", "car"};
    char *verb [number] = {"drove", "jumped", "ran", "walked", "skipped"};
    char *preposition [number] = {"to", "from", "over", "under", "on"};
 
    srand (time (NULL));
    for (int i=0; i<number_offer; i++)
    {
        // first word
        strcat (MAS, *(article+random()) );
        strcat (MAS, " ");
        MAS[0]-=32;
        // second word
        strcat (MAS, *(noun+random()) );
        strcat (MAS, " ");
        // third word
        strcat (MAS, *(verb+random()) );
        strcat (MAS, " ");
        // fourth word
        strcat (MAS, *(preposition+random()) );
        strcat (MAS, " ");
        // fifth word
        strcat (MAS, *(article+random()) );
        strcat (MAS, " ");
        // sixth word
        strcat (MAS, *(noun+random()) );
        strcat (MAS, ". ");
 
        strcat (text, MAS);
        memset (MAS, 0, sizeof(MAS));
    }
 
    std::cout << "Rezult: " << text;
    std::cout << std::endl;
 
    system ("pause");
    return 0;
}
0
Миниатюры
Ошибка.  
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
27.06.2010, 23:30 #9
Цитата Сообщение от neske Посмотреть сообщение
kazak, а как мне отчистить массив с предложением?
Можно MAS[0] = '\0';
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2010, 23:30
Привет! Вот еще темы с ответами:

типизированный файл, ошибка ошибка при выходе - C++
Работа с типизированным файлом. В функцию вывода добавляю проверку if для вывода персонала только 1 подразделения. Выводит на 1 элемент...

С++ ошибка в проге, но не могу понять какая ошибка( - C++
#include &lt;iostream&gt; #include &lt;cmath&gt; #include &lt;clocale&gt; using namespace std; int main (int args, const char * argv ) { ...

Ошибка 2 error LNK2019, не пойму в чем ошибка - C++
Выдает такую ошибку: Ошибка 2 error LNK2019: ссылка на неразрешенный внешний символ &quot;int __cdecl game(void)&quot; (?game@@YAHXZ) в функции....

Синтаксическая ошибка: Ошибка 1 error C2059 - C++
#include &lt;iostream&gt; using namespace std; class Cat { public:


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.06.2010, 23:30
Ответ Создать тему
Опции темы

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