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

Одинаковый фрагмент действует по-разному в двух программах - C++

Восстановить пароль Регистрация
 
Керра
Модератор
 Аватар для Керра
1270 / 438 / 45
Регистрация: 24.08.2011
Сообщений: 2,123
24.11.2014, 16:22     Одинаковый фрагмент действует по-разному в двух программах #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <fstream>
#include <iostream>
using namespace std;
 
int main()
{
    ifstream fin;
    char name[50];
    do
    {
        cout << "Vvedite: ";
        gets(name);
        fin.open(name);
        if (!fin.is_open())
            cout << "Oshibka pri otkrytii faila!\n";
    } while (!fin.is_open());
    fin.getline(name, 50);
    fin.close();
    cout << name << endl;
    system("pause");
    return 0;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Shelving::Shelving()
{
    ifstream fin;
    char filename[50];
    do
    {
        cout << "Vvedite puti k failu s dannymi o stellaje: ";
        gets(filename);
        fin.open(filename);
        if (!fin.is_open())
            cout << "Oshibka pri otkrytii faila!\n";
    } while (!fin.is_open());
 
    fin.getline(name, 50);
    fin >> nWarehouse >> nItems;
    for (int i = 0; i < nItems; i++)
        items[i] = new Item(fin);
    fin.close();
}
При вводе имени одного и того же существующего корректного текстового файла первая программа работает, а на втором фрагменте происходит ошибка со считыванием строки на строке fin.getline(name, 50) (см. вложение). В чем вообще разница и почему не работает? Вкладываю проект на всякий случай.
Миниатюры
Одинаковый фрагмент действует по-разному в двух программах  
Вложения
Тип файла: rar Climova Olga 01.rar (5.40 Мб, 1 просмотров)
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2014, 16:22     Одинаковый фрагмент действует по-разному в двух программах
Посмотрите здесь:

Почему функция strchr по разному работает при разных строках? C++
C++ Использование указателей в программах
C++ Вывести на экран текст состоящий из слов которые начинаются и заканчиваются на одинаковый символ
C++ Почему одинаковые коды работают по разному?
блок программы скобки, всегда встречаю по разному C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ssergius
6 / 6 / 2
Регистрация: 10.03.2013
Сообщений: 48
24.11.2014, 16:25     Одинаковый фрагмент действует по-разному в двух программах #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Во втором куске name инициализирован и права доступа есть?
Керра
Модератор
 Аватар для Керра
1270 / 438 / 45
Регистрация: 24.08.2011
Сообщений: 2,123
24.11.2014, 16:29  [ТС]     Одинаковый фрагмент действует по-разному в двух программах #3
ssergius, да. Это закрытый член класса Shelving.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Shelving
{
public:
    Shelving(); // конструктор по умолчанию
    Shelving(char *filename); // из файла
    ~Shelving(); // деструктор
    friend ostream& operator << (ostream &out, const Shelving &el);
    friend ofstream& operator << (ofstream &fout, const Shelving &el);
    void PrintFile();
    void Correct();
    bool SameItem();
    float TotalWeight();
    void Search(); // по названию детали
    bool More10NotHigher2();
private:
    char *name;
    int nWarehouse;
    (Item*) items[50];
    int nItems;
    Item& Search(char *name); // по названию детали
};
При компиляции все нормально

Добавлено через 28 секунд
ssergius, все, поняла... я же не инициализировала...
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2139 / 972 / 223
Регистрация: 30.11.2013
Сообщений: 3,241
24.11.2014, 16:46     Одинаковый фрагмент действует по-разному в двух программах #4
Цитата Сообщение от Керра Посмотреть сообщение
fin.open(filename);
fin.close();
избегайте такого подхода - напишите обертку на основе паттерна RAII
Yandex
Объявления
24.11.2014, 16:46     Одинаковый фрагмент действует по-разному в двух программах
Ответ Создать тему
Опции темы

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