Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
33 / 33 / 8
Регистрация: 17.09.2012
Сообщений: 193

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

25.10.2012, 20:24. Показов 1111. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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;
}


Добавлено через 54 минуты
В чем ошибка-то?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.10.2012, 20:24
Ответы с готовыми решениями:

В чем ошибка? (Строки. Массивы. Указатели)
Всем добрый вечер. Объясните пожалуйста в чём ошибка в строке с коментарием &quot;ошибка&quot; ? class CMyString{ char *pStr; ...

Жёсткая поломка жёсткого
Добрый день! В общем У знакомого есть внешний HDD A-DATA(Toshiba HDD2J51). Работал он с ним, жёский отключился, включился, попросил...

Жёсткая система уравнений
Пытаюсь решить жесткую систему уравнений с помощью функции Stiffb. Выдаёт ошибку &quot;Эти измерения массива н соответствуют&quot;. Что не...

15
 Аватар для soft.creator
106 / 106 / 11
Регистрация: 17.10.2010
Сообщений: 283
25.10.2012, 20:25
Как насчет память выделить перед этим?
C++
1
name [0] = '\0';
И вообще, а зачем это надо?
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
25.10.2012, 20:29
А где происходит ошибка? При каких обстоятельствах? У меня все работает на студии
0
33 / 33 / 8
Регистрация: 17.09.2012
Сообщений: 193
25.10.2012, 22:27  [ТС]
Цитата Сообщение от 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;
}
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.10.2012, 00:45
Цитата Сообщение от Croessmah Посмотреть сообщение
У меня все работает на студии
А у меня всё не работает. Здесь:
C++
1
name [0] = '\0';
попытка по индексу обратиться к пустой строке. Если уж делать, то так:
C++
1
name = "\0";
Добавлено через 3 минуты
Цитата Сообщение от FliXis Посмотреть сообщение
Изменил метод getdata и теперь все нормально закрывается и работает.
Разве только это изменили?
0
33 / 33 / 8
Регистрация: 17.09.2012
Сообщений: 193
26.10.2012, 12:29  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
Разве только это изменили?
Да, ну в конструкторе еще удалил name [0] = '\0'; - но это я и раньше убирал - не помогало. Помогла именно замена в методе.
А name [0] = '\0'; не нужна совершенно для string.
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.10.2012, 13:50
Цитата Сообщение от FliXis Посмотреть сообщение
но это я и раньше убирал - не помогало
Не понятно тогда, почему у меня (студия 2010) код из первого поста (если сделать name = "\0") нормально отрабатывает? Среда какая? 12 Студия?

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

А вообще конструкция такого вида (std::string [0] = 0) никакого смысла не имеет.
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.10.2012, 14:36
Цитата Сообщение от Герц Посмотреть сообщение
Обращение к пустой строке по нулевому индексу вызывать ошибку
Это стандарт или у кого как? mingv же не выдаёт ошибки. Программист должен за этим следить?
0
545 / 344 / 12
Регистрация: 05.11.2010
Сообщений: 1,076
Записей в блоге: 1
26.10.2012, 14:37
Это реализация контейнеров STL у Microsoft в дебаг версии. Соберите релиз и ошибки пропадут. В Дебаг версии там на каждое обращение по индексу стоит проверка на выход за границы.
0
33 / 33 / 8
Регистрация: 17.09.2012
Сообщений: 193
26.10.2012, 18:09  [ТС]
Не понятно тогда, почему у меня (студия 2010) код из первого поста (если сделать name = "\0") нормально отрабатывает? Среда какая? 12 Студия?
Студия 12.

На это
C++
1
name [0] = '\0';
забейте. Я думал, что надо в string в конструкторе сделать изначально пустую строку, как в char, а потом узнал, что там и без тог отак по дефолту в string этих.
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.10.2012, 18:16
Цитата Сообщение от 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;
}
0
33 / 33 / 8
Регистрация: 17.09.2012
Сообщений: 193
26.10.2012, 19:26  [ТС]
У меня ошибка в таком случае остается. Ну и из "глюков" нельзя вводить двойное имя, как того требовало мое задание. =)
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.10.2012, 19:31
Цитата Сообщение от FliXis Посмотреть сообщение
У меня ошибка в таком случае остается
Вот это и не понятно. На двух компиляторах без ошибок. И по коду не видно, что там могут быть ошибки. А что конкретно вводите и сколько раз?
0
33 / 33 / 8
Регистрация: 17.09.2012
Сообщений: 193
26.10.2012, 19:33  [ТС]
Ввожу номер и имя(латиница/рус без разницы). Обычно три раза. Ошибка. Один раз - тоже ошибка.
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.10.2012, 19:49
Отнесём к особенностям 12 Студии.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.10.2012, 19:49
Помогаю со студенческими работами здесь

RAID1 и жесткая перезагрузка ОС
Добрый день. Страдаю от того что при аварийной перезагрузке ОС (т.е. при потере питания например) в 100% случаев &quot;разваливается&quot;...

Жесткая критика сайта :)
Почему запрещено удалять и редактировать свои сообщения?

Вредна ли жесткая стабилизация
Доброго времени суток. Имеется ИБП Santak UPS, а так же не совсем стабильное напряжение в сети. Днём напряжение может быть в вполне...

Жесткая привязка AutomationId
Добрый день! Возникла необходимость в автоматизированном тестировании некоего Delphi приложения. При каждом запуске приложения...

Статика. Жесткая заделка
Помогите пожалуйста с задачей по термеху. Никак не могу разобраться с реакциями.


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru