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

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

17.12.2009, 02:39. Показов 984. Ответов 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, что на одном, что на другом компе содержит одну и ту же информацию, и на обоих компах доступен для чтения/записи.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.12.2009, 02:39
Ответы с готовыми решениями:

Написать программу для работы с типизированным файлом. Программа должна выполнять следующие функции
Написать программу для работы с типизированным файлом. Программа должна выполнять следующие функции: 1. создание типизированного файла из...

SIM900 неадекватно реагирует на АТ-команды
Всем привет! В один прекрасным момент мой SIM900 стал неадекватно реагировать на любые АТ-команды, а именно вместо ОК он стал...

СМА Candy G04106-07s s/n:3100216708290324, неадекватно реагирует на выбор программ и нажатия на кнопки
Добрый день! Со слов хозяев наблюдалось отсутствие отжима, и предположение, что сбита программа. Но якобы все исправно стирало. Изначальная...

9
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
17.12.2009, 09:10
Цитата Сообщение от Dmitrii_M Посмотреть сообщение
fseek (f, 0, 1);
Если нужно установить указатель позиции в начало файла, то лучше так:
C
1
rewind(f);
Ваш же вариант должен бы означать "никуда его не двигать", что странно...
Лучше всё-таки в качестве параметров SEEK_SET/SEEK_CUR/SEEK_END писать - самому понятнее, куда что двигаться должно...
1
 Аватар для kuroiryuu
328 / 312 / 68
Регистрация: 05.11.2009
Сообщений: 712
17.12.2009, 09:28
функция fread() сама позиционируется в файле, так что fseek вообще не нужен...
а если хотели встать на начало файла, то необходимо fseek (f, 0, SEEK_SET)

PS #define SEEK_SET 0, #define SEEK_CUR 1 - в вашем примере вы использовали SEEK_CUR
1
2 / 2 / 0
Регистрация: 11.09.2009
Сообщений: 29
17.12.2009, 11:14  [ТС]
Спасибо за ответы, но как тогда объяснить вылет с fclose()?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
17.12.2009, 14:41
Dmitrii_M, а Вы бы всю программу целиком показали - может кто и понял бы...
1
 Аватар для kuroiryuu
328 / 312 / 68
Регистрация: 05.11.2009
Сообщений: 712
18.12.2009, 11:10
действительно, а то это похоже на гадание на кофейной гуще
1
2 / 2 / 0
Регистрация: 11.09.2009
Сообщений: 29
18.12.2009, 14:58  [ТС]
Вот вся программа.
Не ругайте, что коряво, просто тут нет моего любимого 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;
    }
Как и в краткой версии в этой нет ничего такого, что могло вызвать бы ошибку.

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

Мне кажется, что проблема не в программе, а в системе, что-то влияет, на программу, вызывая ошибку. Так что это общий вопрос получается.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
18.12.2009, 15:29
Проблемы начинаются с перемешивания С и С++
Если правильно понял задачу, то вот так как-то:
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;
}
1
 Аватар для kuroiryuu
328 / 312 / 68
Регистрация: 05.11.2009
Сообщений: 712
19.12.2009, 11:27
в принципе эта программа и так работает.
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;
}
1
2 / 2 / 0
Регистрация: 11.09.2009
Сообщений: 29
19.12.2009, 12:52  [ТС]
Спасибо всем за примеры, можно считать, что вопрос решен.

// а если меньше 5, то ничего не делать?
В задаче оговаривается, что все числа - натуральные, а так как число должно оканчиваться 5, то минимальное 5. Задача про быстрое возведение чисел оканчивающихся на 5 в квадрат.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.12.2009, 12:52
Помогаю со студенческими работами здесь

Программа для работы с файлом
Задача такая: Дан текстовый файл, в котором есть 30 наименований книг( с автором,годом издания). Нужно написать программу, что бы она ...

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

Программа для работы с файлом
Помогите, пожалуйста!!!!! 11. Дано файл чисел. Создать два новых файла, первый из которых содержит элементы исходного файла с нечетными...

Программа для работы с txt файлом
Привет ребята, сразу скажу что я не программист, и нуждаюсь в вашей помощи. Уверен, что для кого то эта задача на 10-15 минут. Мне нужно...

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru