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

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

Войти
Регистрация
Восстановить пароль
 
neske
1474 / 841 / 74
Регистрация: 26.03.2010
Сообщений: 2,889
#1

Ошибка. - C++

27.06.2010, 22:23. Просмотров 351. Ответов 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;
}
Миниатюры
Ошибка.   Ошибка.  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.06.2010, 22:23     Ошибка.
Посмотрите здесь:

IIS- asp ошибка: HTTP 500.100 - Внутренняя ошибка сервера - ошибка ASP Internet Information Services - C# ASP.NET
Привет! Конфигурация win2000pro sp2, стандартный IIS, IE 5. При попытке обратиться к сценарию(asp) получаю ошибку: &lt;пропуск&gt; ......

1C 8.x Ошибка при чтении изменений при обмене РИБ: Ошибка при вызове метода контекста (ПрочитатьИзменения): Ошибка записи! - 1С
Доброго всем времени суток! подскажи пожалуйста как исправить ошибку: Ошибка при чтении изменений при обмене РИБ: Ошибка при вызове...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
neske
1474 / 841 / 74
Регистрация: 26.03.2010
Сообщений: 2,889
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;
}
Миниатюры
Ошибка.  
neske
1474 / 841 / 74
Регистрация: 26.03.2010
Сообщений: 2,889
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;
}
Миниатюры
Ошибка.  
kazak
3033 / 2354 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
27.06.2010, 22:53     Ошибка. #4
Цитата Сообщение от neske Посмотреть сообщение
Только не понял, почему недочет пропал.
char *strcat(char *s1, const char *s2);
Функция strcat добавляет копию строки, на которую указывает s2 (включая
завершающий нулевой символ) в конец строки, на которую указывает s1.
Начальный символ строки s2 записывается поверх нулевого символа в конце
строки s1. Если объекты перекрываются, поведение функции не определено.
Функция strcat возвращает значение s1.

Обрати внимание на выделенные участки. Изначально ты пытался добавить строку в неинициализированный массив, как по твоему где у него будет конец строки? И будет ли вообще?
neske
1474 / 841 / 74
Регистрация: 26.03.2010
Сообщений: 2,889
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)
kazak
3033 / 2354 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
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 Посмотреть сообщение
нужно составлять небольшие рассказы. Большая буква будет не только первая.
Можно использовать два массива, один для предложения, другой для рассказа.
neske
1474 / 841 / 74
Регистрация: 26.03.2010
Сообщений: 2,889
27.06.2010, 23:17  [ТС]     Ошибка. #7
И правда, работает 8)
На счет кодировки да, перепутал.

kazak, а как мне отчистить массив с предложением?
neske
1474 / 841 / 74
Регистрация: 26.03.2010
Сообщений: 2,889
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;
}
Миниатюры
Ошибка.  
kazak
3033 / 2354 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
27.06.2010, 23:30     Ошибка. #9
Цитата Сообщение от neske Посмотреть сообщение
kazak, а как мне отчистить массив с предложением?
Можно MAS[0] = '\0';
Yandex
Объявления
27.06.2010, 23:30     Ошибка.
Ответ Создать тему
Опции темы

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