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

Массивы и строки - жесткая ошибка с - C++

Восстановить пароль Регистрация
 
FliXis
31 / 31 / 2
Регистрация: 17.09.2012
Сообщений: 161
25.10.2012, 20:24     Массивы и строки - жесткая ошибка с #1
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 "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
 
 
 
///////////////////////////////////////////////////////////////////////
class employee
{
private:
    long number;
    string name;
public:
    employee()
    {
        number = 0;
        name [0] = '\0';
    }
    void getdata()
    {
        cout << "Введите номер: "; cin >> number;
        cout << "Введите имя: "; cin >> name;
    }
    void putdata()
    {
        cout << "Номер: " << number << ", имя: " << name << endl;
    }
};
///////////////////////////////////////////////////////////////////////
int main ()
{
    system("chcp 1251 >nul");
  
    employee emp [100];
    char ch;
    int n=0;
    
    do
    {
        emp [n++].getdata();
        cout << "Продолжить (y/n): "; cin >> ch;
    }
    while( ch != 'n');
    
    for(int j=0 ; j<n ; j++)
    {
        emp [j].putdata();
    }
 
    system("pause");
    return 0;
}
http://i023.***********/1210/7e/6ee49c4767bb.png

Добавлено через 54 минуты
В чем ошибка-то?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.10.2012, 20:24     Массивы и строки - жесткая ошибка с
Посмотрите здесь:

Массивы и строки C++
Массивы и строки C++
C++ Массивы. Строки.
массивы и строки C++
C++ строки и массивы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soft.creator
 Аватар для soft.creator
103 / 103 / 4
Регистрация: 17.10.2010
Сообщений: 283
25.10.2012, 20:25     Массивы и строки - жесткая ошибка с #2
Как насчет память выделить перед этим?
C++
1
name [0] = '\0';
И вообще, а зачем это надо?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
25.10.2012, 20:29     Массивы и строки - жесткая ошибка с #3
А где происходит ошибка? При каких обстоятельствах? У меня все работает на студии
FliXis
31 / 31 / 2
Регистрация: 17.09.2012
Сообщений: 161
25.10.2012, 22:27  [ТС]     Массивы и строки - жесткая ошибка с #4
Цитата Сообщение от soft.creator Посмотреть сообщение
Как насчет память выделить перед этим?
C++
1
name [0] = '\0';
И вообще, а зачем это надо?
Тобишь выделить? Массив объектов инициирован, переменные определены.
А по поводу: name [0] = '\0'; - видел в книге Лафоре. Подумал стандартный ход конструктора класса для строк.

Ошибка происходит в самом конце. После того как появляется надпись - нажмите что угодно для закрытия командной строки - нажимаю и тут же происходит ошибка. Все кроме этого(как и сама программа) отлично работает, как и задумывал.

Добавлено через 1 час 29 минут
Заметил, что если просто нажать на крест чтобы убрать окно консоли - то все нормально. Если же нажать клавишу любую, то происходит ошибка. Попробовал в QT - но там только нажатием на крест можно закрыть консоль. С другими моими прогами все нормально и такой ошибки нет.

Добавлено через 22 минуты
Изменил метод getdata и теперь все нормально закрывается и работает. В чем был прикол не понимаю.

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
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
 
 
 
///////////////////////////////////////////////////////////////////////
class employee
{
private:
    long number;
    string name;
public:
    employee()
    {
        number = 0;
    }
    void getdata()
    {
        cout << "Введите номер: "; (cin>> number).get();
        cout << "Введите имя: "; getline(cin, name);
    }
    void putdata()
    {
        cout << "Номер: " << number << ", имя: " << name << endl;
    }
};
///////////////////////////////////////////////////////////////////////
int main ()
{
    system("chcp 1251 >nul");
  
    employee emp [100];
    char ch;
    int n=0;
    
    do
    {
        emp [n++].getdata();
        cout << "Продолжить (y/n): "; cin >> ch;
    }
    while( ch != 'n');
    
    for(int j=0 ; j<n ; j++)
    {
        emp [j].putdata();
    }
 
    system("pause");
    return 0;
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.10.2012, 00:45     Массивы и строки - жесткая ошибка с #5
Цитата Сообщение от Croessmah Посмотреть сообщение
У меня все работает на студии
А у меня всё не работает. Здесь:
C++
1
name [0] = '\0';
попытка по индексу обратиться к пустой строке. Если уж делать, то так:
C++
1
name = "\0";
Добавлено через 3 минуты
Цитата Сообщение от FliXis Посмотреть сообщение
Изменил метод getdata и теперь все нормально закрывается и работает.
Разве только это изменили?
FliXis
31 / 31 / 2
Регистрация: 17.09.2012
Сообщений: 161
26.10.2012, 12:29  [ТС]     Массивы и строки - жесткая ошибка с #6
Цитата Сообщение от alsav22 Посмотреть сообщение
Разве только это изменили?
Да, ну в конструкторе еще удалил name [0] = '\0'; - но это я и раньше убирал - не помогало. Помогла именно замена в методе.
А name [0] = '\0'; не нужна совершенно для string.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.10.2012, 13:50     Массивы и строки - жесткая ошибка с #7
Цитата Сообщение от FliXis Посмотреть сообщение
но это я и раньше убирал - не помогало
Не понятно тогда, почему у меня (студия 2010) код из первого поста (если сделать name = "\0") нормально отрабатывает? Среда какая? 12 Студия?

Добавлено через 4 минуты
От реализации, наверное, зависит. Сейчас попробовал в Code Blocks (mingv). Код из первого поста (без всяких изменений) отрабатывает без ошибок.
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
26.10.2012, 14:17     Массивы и строки - жесткая ошибка с #8
не отрабатывает в debug версии, так как в debug билдах на visual studio есть жесткие проверки по-умолчанию, например проверки выхода за границы контейнеров (сюда входят и строки). Обращение к пустой строке по нулевому индексу вызывать ошибку, так как строка пока пуста (никаких завершающий нулей std::string не хранит, это ни к чему).

А вообще конструкция такого вида (std::string [0] = 0) никакого смысла не имеет.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.10.2012, 14:36     Массивы и строки - жесткая ошибка с #9
Цитата Сообщение от Герц Посмотреть сообщение
Обращение к пустой строке по нулевому индексу вызывать ошибку
Это стандарт или у кого как? mingv же не выдаёт ошибки. Программист должен за этим следить?
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
26.10.2012, 14:37     Массивы и строки - жесткая ошибка с #10
Это реализация контейнеров STL у Microsoft в дебаг версии. Соберите релиз и ошибки пропадут. В Дебаг версии там на каждое обращение по индексу стоит проверка на выход за границы.
FliXis
31 / 31 / 2
Регистрация: 17.09.2012
Сообщений: 161
26.10.2012, 18:09  [ТС]     Массивы и строки - жесткая ошибка с #11
Не понятно тогда, почему у меня (студия 2010) код из первого поста (если сделать name = "\0") нормально отрабатывает? Среда какая? 12 Студия?
Студия 12.

На это
C++
1
name [0] = '\0';
забейте. Я думал, что надо в string в конструкторе сделать изначально пустую строку, как в char, а потом узнал, что там и без тог отак по дефолту в string этих.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.10.2012, 18:16     Массивы и строки - жесткая ошибка с #12
Цитата Сообщение от FliXis Посмотреть сообщение
забейте.
Давно забили. Вопрос в другом. Если так сделать, ошибка остаётся?
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
//#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
 
 
 
///////////////////////////////////////////////////////////////////////
class employee
{
private:
    long number;
    string name;
public:
    employee()
    {
        number = 0;
    }
    void getdata()
    {
        cout << "Введите номер: "; cin >> number;
        cout << "Введите имя: "; cin >> name;
    }
    void putdata()
    {
        cout << "Номер: " << number << ", имя: " << name << endl;
    }
};
///////////////////////////////////////////////////////////////////////
int main ()
{
    system("chcp 1251 >nul");
  
    employee emp [100];
    char ch;
    int n=0;
    
    do
    {
        emp [n++].getdata();
        cout << "Продолжить (y/n): "; cin >> ch;
    }
    while( ch != 'n');
    
    for(int j=0 ; j<n ; j++)
    {
        emp [j].putdata();
    }
 
    system("pause");
    return 0;
}
FliXis
31 / 31 / 2
Регистрация: 17.09.2012
Сообщений: 161
26.10.2012, 19:26  [ТС]     Массивы и строки - жесткая ошибка с #13
У меня ошибка в таком случае остается. Ну и из "глюков" нельзя вводить двойное имя, как того требовало мое задание. =)
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.10.2012, 19:31     Массивы и строки - жесткая ошибка с #14
Цитата Сообщение от FliXis Посмотреть сообщение
У меня ошибка в таком случае остается
Вот это и не понятно. На двух компиляторах без ошибок. И по коду не видно, что там могут быть ошибки. А что конкретно вводите и сколько раз?
FliXis
31 / 31 / 2
Регистрация: 17.09.2012
Сообщений: 161
26.10.2012, 19:33  [ТС]     Массивы и строки - жесткая ошибка с #15
Ввожу номер и имя(латиница/рус без разницы). Обычно три раза. Ошибка. Один раз - тоже ошибка.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2012, 19:49     Массивы и строки - жесткая ошибка с
Еще ссылки по теме:

массивы, строки с++ C++
В чем ошибка? (Строки. Массивы. Указатели) C++
C++ Массивы и строки

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.10.2012, 19:49     Массивы и строки - жесткая ошибка с #16
Отнесём к особенностям 12 Студии.
Yandex
Объявления
26.10.2012, 19:49     Массивы и строки - жесткая ошибка с
Ответ Создать тему
Опции темы

Текущее время: 03:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru