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

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

Войти
Регистрация
Восстановить пароль
 
Dmitrii_M
2 / 2 / 0
Регистрация: 11.09.2009
Сообщений: 29
#1

Программа неадекватно реагирует на функции работы с файлом.. - C++

17.12.2009, 02:39. Просмотров 497. Ответов 9
Метки нет (Все метки)

Я написал небольшую простенькую программку, читающую что-то из файла, и записывающую что-то в другой файл, проверил на своем компе - все работает, перенес на другой отказывается, вылетает ошибка.

Компилятор: Dev-cpp.

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
#include <cstdlib>
#include <iostream>
#include <conio.h>
#include <strings.h>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    
   
    ...
    FILE* f=fopen("c:\\read3.txt","r+");
    FILE* f2=fopen("c:\\write3.txt","w+");
 
    ...     
    fseek (f, 0, 1);   fread (str,10,1,f);                    
    
    ...
 
    fclose(f);
    fclose(f2);
    system("PAUSE");
    return EXIT_SUCCESS; 
     
    
}
Причем, вылетает из-за fseek (f, 0, 1), fread (str,10,1,f), fclose(f).
Когда временно исключал(делал комментариями) из программы эти функции, то программа не завершалась ошибкой. Что еще интересно, при fopen("c:\\read3.txt","r+") программа не вылетает.
Файл c:\\read3.txt, что на одном, что на другом компе содержит одну и ту же информацию, и на обоих компах доступен для чтения/записи.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.12.2009, 02:39     Программа неадекватно реагирует на функции работы с файлом..
Посмотрите здесь:

C++ Класс для работы с файлом.
C++ Программа с заголовочным файлом (с++)
C++ Какой проект открыть для работы с файлом или БД?
C++ Адаптировать задачу для работы с файлом
C++ Написать программу работы с файлом сведений
C++ Программа со строками не реагирует на ввод конца файла
Программа, которая не реагирует на регистр букв C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Эксперт С++
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
17.12.2009, 09:10     Программа неадекватно реагирует на функции работы с файлом.. #2
Цитата Сообщение от Dmitrii_M Посмотреть сообщение
fseek (f, 0, 1);
Если нужно установить указатель позиции в начало файла, то лучше так:
C
1
rewind(f);
Ваш же вариант должен бы означать "никуда его не двигать", что странно...
Лучше всё-таки в качестве параметров SEEK_SET/SEEK_CUR/SEEK_END писать - самому понятнее, куда что двигаться должно...
kuroiryuu
312 / 296 / 23
Регистрация: 05.11.2009
Сообщений: 698
Завершенные тесты: 2
17.12.2009, 09:28     Программа неадекватно реагирует на функции работы с файлом.. #3
функция fread() сама позиционируется в файле, так что fseek вообще не нужен...
а если хотели встать на начало файла, то необходимо fseek (f, 0, SEEK_SET)

PS #define SEEK_SET 0, #define SEEK_CUR 1 - в вашем примере вы использовали SEEK_CUR
Dmitrii_M
2 / 2 / 0
Регистрация: 11.09.2009
Сообщений: 29
17.12.2009, 11:14  [ТС]     Программа неадекватно реагирует на функции работы с файлом.. #4
Спасибо за ответы, но как тогда объяснить вылет с fclose()?
easybudda
Эксперт С++
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
17.12.2009, 14:41     Программа неадекватно реагирует на функции работы с файлом.. #5
Dmitrii_M, а Вы бы всю программу целиком показали - может кто и понял бы...
kuroiryuu
312 / 296 / 23
Регистрация: 05.11.2009
Сообщений: 698
Завершенные тесты: 2
18.12.2009, 11:10     Программа неадекватно реагирует на функции работы с файлом.. #6
действительно, а то это похоже на гадание на кофейной гуще
Dmitrii_M
2 / 2 / 0
Регистрация: 11.09.2009
Сообщений: 29
18.12.2009, 14:58  [ТС]     Программа неадекватно реагирует на функции работы с файлом.. #7
Вот вся программа.
Не ругайте, что коряво, просто тут нет моего любимого AnsiString вот пришлось импровизировать.

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
#include <cstdlib>
#include <iostream>
#include <conio.h>
#include <strings.h>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    cout<<"Zadacha 3: \"sqr(..5)=?\".\n";
    cout<<"Podgotovleno uchenikom 11 klassa gimnazii Maliuga Dmitriiem.\n\n\n";
    char   str[]="          ";       
    
      cout<<"   Input: c:\\read3.txt\n";
      cout<<"   Output: c:\\write3.txt\n\n";
    int num;
    FILE* f=fopen("c:\\read3.txt","r+");
    FILE* f2=fopen("c:\\write3.txt","w+");
         
    fseek (f, 0, 1);   fread (str,10,1,f);                    
    int i=atoi(str);
    
    int k,a;
    if(i>5)
    {                                                    //Если число >5
    k=(i-5)/10;
    a=(k*(k+1))*100+25;        
    }    
    else if(i==5)
    {
    a=25;                                            //Если число <5
    }
     cout<<"Ishodnoe znachenie = "<<i<<".\n";
     cout<<"Otvet = "<<a<<".\n";
     
    char ans[]="  ";
    itoa(a,ans,10);
    
    
    fwrite ( ans,strlen(ans), 1, f2);     //Вывод
        
    fclose(f);
    fclose(f2);
    system("PAUSE");
    return EXIT_SUCCESS;
    }
Как и в краткой версии в этой нет ничего такого, что могло вызвать бы ошибку.

Ошибка вылетала на ноутбуке, не вызывая дебаггер, на стационарных(проверял на нескольких) все шло без ошибок.

Мне кажется, что проблема не в программе, а в системе, что-то влияет, на программу, вызывая ошибку. Так что это общий вопрос получается.
easybudda
Эксперт С++
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
18.12.2009, 15:29     Программа неадекватно реагирует на функции работы с файлом.. #8
Проблемы начинаются с перемешивания С и С++
Если правильно понял задачу, то вот так как-то:
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
#include <iostream>
#include <fstream>
 
int main(){
    int a, b, c;
    std::ifstream fin("read3.txt");
    if ( ! fin.is_open() ){
        std::cerr << "Can't open input file!" << std::endl;
        return 1;
    }
    
    fin >> a;
    fin.close();
    if ( a > 5 ){
        b = (a - 5) / 10;
        c = (b * (b + 1)) * 100 + 25;
    }
    else if ( a == 5 )
        c = 25;
    // а если меньше 5, то ничего не делать?
    else
        return 0;
    std::cout << "Value = " << a << std::endl << "Result = " << c << std::endl;
    
    std::ofstream fout("write3.txt");
    if ( ! fout.is_open() ){
        std::cerr << "Can't open output file!" << std::endl;
        return 1;
    }
    fout << c;
    fout.close();
    
    return 0;
}
kuroiryuu
312 / 296 / 23
Регистрация: 05.11.2009
Сообщений: 698
Завершенные тесты: 2
19.12.2009, 11:27     Программа неадекватно реагирует на функции работы с файлом.. #9
в принципе эта программа и так работает.
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
#include <cstdlib>
#include <iostream>
#include <direct.h>
#include <conio.h>
#include <string>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    char str[65];       
    char cCurrentPath[255];
 
    if (!_getcwd(cCurrentPath, sizeof(cCurrentPath)))
    {
        return errno;
    }
 
    cCurrentPath[sizeof(cCurrentPath) - 1] = '\0'; /* not really required */
 
 
    string strPath ("");
    strPath.clear();
    strPath = cCurrentPath;
    strPath.insert(strPath.length(),"\\read3.txt");
 
 
    FILE *f, *f2;
    if (fopen_s(&f, strPath.c_str(), "r+") != 0)
    {
        cout << "The file 'read3.txt' was not opened" << endl;
        return 1;
    }
             
    fseek(f, 0, 1);   
    fread(str, 10, 1, f);                    
 
    fclose(f);
 
    int i = atoi(str);
 
    int k, a;
    if(i > 5)
    {                                                    //Если число >5
        k = (i - 5) / 10;
        a = (k * (k + 1)) * 100 + 25;        
    }    
    else 
        if(i == 5)
            a = 25;                                            //Если число <5
 
    cout << "Ishodnoe znachenie = " << i << ".\n";
    cout << "Otvet = " << a <<".\n";
     
    char ans[65];
    _itoa(a, ans, 10);
 
    strPath.clear();
    strPath = cCurrentPath;
    strPath.insert(strPath.length(),"\\write3.txt");
    if (fopen_s(&f2, "write3.txt", "w+") != 0)
    {
        cout << "The file 'write3.txt' was not opened" << endl;
        return 1;
    }
    else
        fwrite(ans,strlen(ans), 1, f2);     //Вывод
 
    fclose(f2);
 
    system("PAUSE");
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.12.2009, 12:52     Программа неадекватно реагирует на функции работы с файлом..
Еще ссылки по теме:

Функция для работы с файлом C++
C++ Программа работы с файлом, отображенным в память
Программа содержащая функции для работы с массивом структур C++
Вынести часть кода работы с бинарным файлом в отдельную функцию C++
Как получить имя файла для дальнейшей работы с этим файлом? C++

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

Или воспользуйтесь поиском по форуму:
Dmitrii_M
2 / 2 / 0
Регистрация: 11.09.2009
Сообщений: 29
19.12.2009, 12:52  [ТС]     Программа неадекватно реагирует на функции работы с файлом.. #10
Спасибо всем за примеры, можно считать, что вопрос решен.

// а если меньше 5, то ничего не делать?
В задаче оговаривается, что все числа - натуральные, а так как число должно оканчиваться 5, то минимальное 5. Задача про быстрое возведение чисел оканчивающихся на 5 в квадрат.
Yandex
Объявления
19.12.2009, 12:52     Программа неадекватно реагирует на функции работы с файлом..
Ответ Создать тему
Опции темы

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