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

обработка файлов - C++

Восстановить пароль Регистрация
 
vitaxa3581
 Аватар для vitaxa3581
0 / 0 / 0
Регистрация: 14.11.2012
Сообщений: 75
08.03.2013, 02:02     обработка файлов #1
товарищи подскажите что не так??? заранее благодарен!!! суть задачи следующая: "Найти максимальный из отрицательных элементов в файле целых чисел." То есть в той же папке что и программа я создаю файл допустим "1.txt" с набором цифр: 3 5 7 2 8 -2 8 -9 11 21 -32 И когда я ввожу в программе 1.txt мне должно выдать: " Максимальный из отрицательных элементов: -32 "
Прога не работает!!! очень много косяков я в этом уверен, но не могу их найти!!!!
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <iostream>
#include <fstream>
#include <conio.h>
 
using namespace std;
                           
int main(int argc, char* argv[])
  { ifstream file;
    
 
    void ReadPrintIcx(ifstream file); 
    void job(char []);             
    void uslovie();                
     int max;
     char namef;
    uslovie();
    cout <<" Введите имя файла:";
    cin>> namef; 
 
 
file.open ("namef");
   
    if (!file.is_open())
      {
                cerr << " Файл"<<namef<<"не открыт!!!";
       exit(-1);
      }
 
   
    if(max)
       cout << " Максимальный из отрицательных элиментов: "<< max <<endl;
    else
       cout <<" Нет отрицательных." << endl;
    getch();
    return 0;
}
 
void uslovie()
  {
  cout <<" Найти максимальный из отрицательных элементов в файле целых чисел." << endl;
  }
 
 
void ReadPrintIcx(ifstream file)
 {int el;
  cout <<" "<<endl;
  while  (file >> el);
    cout << " |  "<< el;
  file.close();
   getch();
}
 
ifstream file;
void job(char namef[])
 {int el;
 int max;
  file.open ("namef");
   
    if (!file.is_open())
      {
                cerr << " Файл"<<namef<<"не открыт!!!";
       exit(-1);
      }
  cout << " "<<endl;
  while 
     (file >> el);
       if (el<0 && max>el)
             max=el;
        
  file.close();
  getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.03.2013, 02:02     обработка файлов
Посмотрите здесь:

C++ Создание и обработка файлов в С
обработка файлов C++
C++ обработка файлов
C++ c++ обработка файлов
Обработка текстовых файлов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
hofmn
Helter Skelter
 Аватар для hofmn
61 / 61 / 1
Регистрация: 19.09.2012
Сообщений: 133
08.03.2013, 02:16     обработка файлов #2
Откуда вы знаете, что много косяков? Что говорит компилятор?
vitaxa3581
 Аватар для vitaxa3581
0 / 0 / 0
Регистрация: 14.11.2012
Сообщений: 75
08.03.2013, 02:42  [ТС]     обработка файлов #3
Цитата Сообщение от hofmn Посмотреть сообщение
Откуда вы знаете, что много косяков? Что говорит компилятор?
компилятор после ввода имени файла вышел из программы даже не показал файл на экран
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
08.03.2013, 02:48     обработка файлов #4
Цитата Сообщение от vitaxa3581 Посмотреть сообщение
компилятор после ввода имени файла вышел из программы
как компилятор мог "выйти из программы"? Компилятор компилирует cpp шники, потом линкер строит из либ и модулей экзешник. Потом экзешник запускается.
При чём тут компилятор ещё раз спрашиваю? Если программа успешно построилась и, судя по твоим словам, запустилась!
vitaxa3581
 Аватар для vitaxa3581
0 / 0 / 0
Регистрация: 14.11.2012
Сообщений: 75
08.03.2013, 03:04  [ТС]     обработка файлов #5
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
как компилятор мог "выйти из программы"? Компилятор компилирует cpp шники, потом линкер строит из либ и модулей экзешник. Потом экзешник запускается.
При чём тут компилятор ещё раз спрашиваю? Если программа успешно построилась и, судя по твоим словам, запустилась!
она запустилась, выдало сообщение:"Введите имя файла:"
Я ввожу "1.txt" нажимаю Enter и все! .exe потух, а должно было вывести: | 3 | 5 | 7 | 2 | 8 | -2 | 8 | -9 | 11 | 21 | -32|
и строку : "максимальный из отрицательных: -32 "
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
08.03.2013, 03:12     обработка файлов #6
так а компилятор то тут в чём виноват? его дело скомпилировать Cpp файлы. Даже экзешник генерировать он не обязан.
Цитата Сообщение от vitaxa3581 Посмотреть сообщение
допустим "1.txt" с набором цифр: 3 5 7 2 8 -2 8 -9 11 21 -32 И когда я ввожу в программе 1.txt мне должно выдать: " Максимальный из отрицательных элементов: -32
вообще-то -2
Цитата Сообщение от vitaxa3581 Посмотреть сообщение
if(max)
* * * *cout << " Максимальный из отрицательных элиментов: "<< max <<endl;
* * else
* * * *cout <<" Нет отрицательных." << endl;
И какое значение присвоено тут max? никакое! всё! прога неверна!
vitaxa3581
 Аватар для vitaxa3581
0 / 0 / 0
Регистрация: 14.11.2012
Сообщений: 75
08.03.2013, 03:39  [ТС]     обработка файлов #7
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
И какое значение присвоено тут max? никакое! всё! прога неверна!
дело даже не в том что он мах не считает а в том что даже файл на экран не выводит.

Добавлено через 2 минуты
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
И какое значение присвоено тут max? никакое! всё! прога неверна!
C++ (Qt)
1
2
3
4
while 
     (file >> el);
       if (el<0 && max>el)
             max=el;
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
08.03.2013, 03:41     обработка файлов #8
Цитата Сообщение от vitaxa3581 Посмотреть сообщение
while
* * *(file >> el);
* * * *if (el<0 && max>el)
* * * * * * *max=el;
нет, не угадал. Теперь подумай.
подсказка: зачем нужны строки 58 и 16???
vitaxa3581
 Аватар для vitaxa3581
0 / 0 / 0
Регистрация: 14.11.2012
Сообщений: 75
08.03.2013, 03:45  [ТС]     обработка файлов #9
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
нет, не угадал. Теперь подумай.
подсказка: зачем нужны строки 58 и 16???
присваивают переменную????
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
08.03.2013, 03:47     обработка файлов #10
ведь присваивается значение max'у, как ты считаешь, объявленному в строке 16,
... или нет?
Зачем же было писать второй раз строку 58???
ну же!
vitaxa3581
 Аватар для vitaxa3581
0 / 0 / 0
Регистрация: 14.11.2012
Сообщений: 75
08.03.2013, 03:52  [ТС]     обработка файлов #11
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Зачем же было писать второй раз строку 58???
без 58 ругается!
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
08.03.2013, 04:44     обработка файлов #12
Цитата Сообщение от vitaxa3581 Посмотреть сообщение
без 58 ругается!
а потому что программы не надо писать, наугад вставляя заплатки от ошибок. Ведь если задуматься, ты объявил вторую совершенно другую переменную, не имеющую ничего общего с первой. А надо было, как одно из решений, объявить
и istream file;
и int max;
только один раз, но так, чтобы их было видно из всех функций.
То есть сделать их глобальными переменными!
А для того, чтоб не совершать таких ошибок, нужно было сначало прочитать про области видимости и отличия глобальных переменных от локальных!

Короче ifstream file;
и int max;
следует объявить в строке 8.
Все остальные ОБЪЯВЛЕНИЯ переменных с такими именами удаляй!

Добавлено через 6 минут

Не по теме:

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
сначало
сначало это такое сначала, только через о

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.03.2013, 07:21     обработка файлов
Еще ссылки по теме:

C++ обработка файлов
обработка файлов данных C++
Обработка файлов C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.03.2013, 07:21     обработка файлов #13
Кликните здесь для просмотра всего текста
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
                           
void ReadPrintIcx(ifstream &file); 
int job(char[]);             
void uslovie(); 
 
int main(int argc, char* argv[])
{ 
    setlocale(0, "");
    
    ifstream file;
                   
    int max;
    char namef[20];
    
    uslovie();
    
    cout <<" Введите имя файла: ";
    cin >> namef; 
 
    file.open (namef);
    if (!file.is_open())
    {
       cerr << " Файл " << namef << " не открыт!!!\n";
       system("pause");
       exit(-1);
    }
    
    ReadPrintIcx(file);
    max = job(namef);
 
   if(max)
       cout << " Максимальный из отрицательных элементов: "<< max <<endl;
   else
       cout <<" Нет отрицательных." << endl;
    
    system("pause");
    return 0;
}
 
void uslovie()
{
  cout <<" Найти максимальный из отрицательных элементов в файле целых чисел." << endl;
}
 
 
void ReadPrintIcx(ifstream &file)
{
  int el;
  
  cout << " " << endl;
  while  (file >> el)
    cout << " |  "<< el;
  
  file.close();
}
 
int job(char namef[])
{
    int el = 0;
    int max = 0;
    ifstream file;
    
    file.open (namef);
    if (!file.is_open())
    {
       cerr << " Файл " << namef << " не открыт!!!\n";
       system("pause");
       exit(-1);
     }
     
     cout << " " << endl;
     
     while (file >> el && el >= 0);
     if (el < 0)
     { 
        max = el;
        while (file >> el) 
            if (el < 0 && el > max) max = el;
        
        file.close();
        return max;
    }
    else return 0;
 
}
Yandex
Объявления
08.03.2013, 07:21     обработка файлов
Ответ Создать тему
Опции темы

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