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

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

Войти
Регистрация
Восстановить пароль
 
Керра
1276 / 444 / 45
Регистрация: 24.08.2011
Сообщений: 2,133
#1

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

24.11.2014, 16:22. Просмотров 193. Ответов 3
Метки нет (Все метки)

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     Одинаковый фрагмент действует по-разному в двух программах
Посмотрите здесь:

Одинаковый id в двух потоках - C++
#include&lt;iostream&gt; #include&lt;thread&gt; using namespace std; class background_task { public: int l; background_task(int i)...

Sprintf отрабатывает по разному - C++
Если просто запустить программу то sprintf округляет тип double до целых, если в режиме отладки то нет. То есть в первом случае выдет 23 во...

Вывести на экран текст состоящий из слов которые начинаются и заканчиваются на одинаковый символ - C++
Дан текст. Вывести на экран текст состоящий из слов которые начинаются и заканчиваются на одинаковый символ.

Цикл по-разному выполняет одинаковые команды - C++
Здравствуйте, пишу программу. Если вкратце, то программа сводит кое-какую задачу к задаче линейного программирования (ЛН), и потом её...

Программа работает по-разному на разных компах - C++
Дали задание на написание небольшой программы в С++, работа с массивами. На домашнем компе работает правильно, всё выполняется. ...

Итератор по разному себя ведет в цикле - C++
Есть такой кусочек кода: string findKey (string key) { for (auto it = sectionList.begin(); it != sectionList.end(); it++) ...

Почему одинаковые коды работают по разному? - C++
Всем привет! У меня довольно необычная проблема. Суть её в том, что я написал программу по аналогии с чужой программой. Однако несмотря...

Почему в книгах по C++ материал подаётся по-разному? - C++
Накачал почти все какие существуют книги по программированию и вот в частности по си++ в каждой книге по разному все рассказывается, как я...

Использование указателей в программах - C++
Тема: «Использование указателей в программах» №5.2 Составить программу, которая вычисляет наибольшие элементы и их порядковые номера...

Fflush(stdin) по-разному работают в unix и windows - C++
Собственно, код: #include &lt;iostream&gt; #include &lt;cstdio&gt; using namespace std; int main() { char word1, word2; ...

блок программы скобки, всегда встречаю по разному - C++
как лучше ставить скобки int main() { return 0; } или

использовать в программах операторы цикла FOR, WHILE, DO WHILE - C++
использовать в программах операторы цикла FOR, WHILE, DO WHILE. y=m((k^2)*(\prod_{1}^{3})(j+d)+ 1/(\sum_{1}^{4})(i+5))


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ssergius
6 / 6 / 2
Регистрация: 10.03.2013
Сообщений: 48
24.11.2014, 16:25     Одинаковый фрагмент действует по-разному в двух программах #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Во втором куске name инициализирован и права доступа есть?
Керра
1276 / 444 / 45
Регистрация: 24.08.2011
Сообщений: 2,133
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
2399 / 1093 / 237
Регистрация: 30.11.2013
Сообщений: 3,620
24.11.2014, 16:46     Одинаковый фрагмент действует по-разному в двух программах #4
Цитата Сообщение от Керра Посмотреть сообщение
fin.open(filename);
fin.close();
избегайте такого подхода - напишите обертку на основе паттерна RAII
Yandex
Объявления
24.11.2014, 16:46     Одинаковый фрагмент действует по-разному в двух программах
Ответ Создать тему
Опции темы

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