Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2018, 10:35   #21
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

Здравствуйте!
Что-то в Датском королевстве не то)))
Пример в котором я не ставил указатель на начало файла я подправил.
Но оказалось, строка
Код:
printf("%f", a);
игнорирует строку
Код:
fread(&a, sizeof(double), 1, f);//считывание вещественного числа
и просто берёт значение переменной а из ОЗУ, для проверки этого обстоятельства и было сделано а=0;
Как же так то? Как брать из файла а не из ОЗУ?
P.S. Строки по вводу и считыванию сделал так
Код:
fread((char *)&a, sizeof(double), 1, f);//считывание вещественного числа
Код:
fwrite((char *)&a, sizeof(double), 1, f);//запись вещественного числа в файл
Но это так, не о том. проблема в том что берёт не из файла..
Изображения
Тип файла: jpg кадр_8.jpg (52.7 Кб, 142 просмотров)

Последний раз редактировалось KAMLS; 02.11.2018 в 10:50.
KAMLS вне форума Ответить с цитированием
Старый 02.11.2018, 10:44   #22
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Ну вы же не проверяете, что вам возвращает fread...
Закрывайте файл или хотя бы флуште. Открывайте файл для чтения.
p51x вне форума Ответить с цитированием
Старый 02.11.2018, 12:39   #23
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Black Fregat Посмотреть сообщение
3) Я бы советовал тут наплевать на рекомендации Microsoft, специфические для её продуктов, и поставить
Код:
#define _CRT_SECURE_NO_WARNINGS
зачем вы советуете новичку писать дурно пахнущий код,
который мало того, что пренебрегает рекомендацией платформы,
так ещё и содержит UB?
_Bers вне форума Ответить с цитированием
Старый 02.11.2018, 12:42   #24
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от KAMLS Посмотреть сообщение
Нет, вообще без запинки и каких-либо сообщений.
откройте для себя волшебный ключик /W4
в вижуал студии, в настройках проекта поищите уровень предупреждений от компилятора. выставляйте максимальный. в дополнение к этому выставляйте "трактовать предупреждение как ошибки"

компилятор приучит вас писать хороший код.
_Bers вне форума Ответить с цитированием
Старый 02.11.2018, 15:36   #25
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Закрывайте файл или хотя бы флуште. Открывайте файл для чтения.
Спасибо большое!
Код:
#include <iostream>
#include<sstream>
#include<fstream>
#include<string>
#include<Windows.h>
#include<conio.h>
#include <cstdlib>

using namespace std;

///////////////////////////////////////////////////////////
int main()
{
	setlocale(LC_CTYPE, "rus");
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);
int n, i;
double a;
FILE *f; //описываем файловую переменную
fopen_s(&f,"C:/Papka/test3.dat", "wb"); //создаем файл в режиме записи 
cout << "n = "; 
cin >> n;//ввод числа n
for (i = 0; i < n; i++)//цикл для ввода n вещественных чисел
{
	cout << "a = ";
	cin >> a;//ввод очередного вещественного числа
	fwrite((char *)&a, sizeof(double), 1, f);//запись вешественного числа в файл
}
a = 0;
fclose(f);//закрываем файл
fflush(f); 
FILE *s; //описываем файловую переменную
fopen_s(&s, "C:/Papka/test3.dat", "rb"); //открываем файл в режиме чтения
fflush(s);
fseek(s, 0, SEEK_SET);
for (i = 0; i < n; i++)//цикл для вывода n вещественных чисел
{
	fread((char *)&a, sizeof(double), 1, s);//считывание вещественного числа в консоль
	printf("%f", a);
	printf( "\n");
}
fclose(s);//закрываем файл
_getch();
return 0;
}
Теперь работает.))


Цитата:
Сообщение от _Bers Посмотреть сообщение
компилятор приучит вас писать хороший код.
Спасибо. Но мне пока что хотя бы кривой код писать научиться бы)) Так чтоб работал хотя бы как бы.. Потом уже шлифовать строгостью. А то я так вообще ничего не пойму из за чего что не работает. Хотя да, конечно так и сделаю попозже.
Спасибо за совет.
KAMLS вне форума Ответить с цитированием
Старый 02.11.2018, 15:47   #26
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

фклоз сама флушит буфер записи, а уж флушить после закрытия файла - Л... логика.
А после открытия то флуш зачем? Вы хоть прочитайте, что он делает или как переводится.
p51x вне форума Ответить с цитированием
Старый 02.11.2018, 16:01   #27
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

То следы экспериментов)))
Вообще то есть такой вопрос:
fflush(f); не срабатывает в таком виде как сделал я. В чем ошибка, скажите пожалуйста?
Код:
int main()
{
	setlocale(LC_CTYPE, "rus");
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);
int n, i;
double a;
FILE *f; //описываем файловую переменную
fopen_s(&f,"C:/Papka/test3.dat", "wb"); //создаем файл в режиме записи 
cout << "n = "; 
cin >> n;//ввод числа n
for (i = 0; i < n; i++)//цикл для ввода n вещественных чисел
{
	cout << "a = ";
	cin >> a;//ввод очередного вещественного числа
	fwrite(&a, sizeof(double), 1, f);//запись вешественного числа в файл
}
a = 0;
//fclose(f);//закрываем файл
fflush(f); //если использовать закрытие файла можно без этой функции
//FILE *s; //описываем файловую переменную
//fopen_s(&s, "C:/Papka/test3.dat", "rb"); //открываем файл в режиме чтения
//fflush(s);
fseek(f, 0, SEEK_SET);
for (i = 0; i < n; i++)//цикл для вывода n вещественных чисел
{
	fread(&a, sizeof(double), 1, f);//считывание вещественного числа в консоль
	printf("%f", a);
	printf( "\n");
}
fclose(f);//закрываем файл
_getch();
return 0;
}
А вот так срабатывает

Код:
int main()
{
	setlocale(LC_CTYPE, "rus");
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);
int n, i;
double a;
FILE *f; //описываем файловую переменную
fopen_s(&f,"C:/Papka/test3.dat", "wb"); //создаем файл в режиме записи 
cout << "n = "; 
cin >> n;//ввод числа n
for (i = 0; i < n; i++)//цикл для ввода n вещественных чисел
{
	cout << "a = ";
	cin >> a;//ввод очередного вещественного числа
	fwrite(&a, sizeof(double), 1, f);//запись вешественного числа в файл
}
a = 0;
fclose(f);//закрываем файл
//fflush(f); если использовать закрытие файла можно без этой функции
FILE *s; //описываем файловую переменную
fopen_s(&s, "C:/Papka/test3.dat", "rb"); //открываем файл в режиме чтения
//fflush(s);
fseek(s, 0, SEEK_SET);
for (i = 0; i < n; i++)//цикл для вывода n вещественных чисел
{
	fread(&a, sizeof(double), 1, s);//считывание вещественного числа в консоль
	printf("%f", a);
	printf( "\n");
}
fclose(s);//закрываем файл
_getch();
return 0;
}
KAMLS вне форума Ответить с цитированием
Старый 02.11.2018, 16:10   #28
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

1. Файл открыть для записи. Открывайте w+b хотя бы.
2. Вы же мой пост читали? фклоз сама запушила запись, а перед чтением флуш как припарка.
p51x вне форума Ответить с цитированием
Старый 02.11.2018, 16:42   #29
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Файл открыть для записи. Открывайте w+b хотя бы.
В интернете написано что rb - это для чтения(http://proginfo.ru/binary-file/)
То, что фклоз флушит я понял.
Я не пронял почему
Цитата:
Сообщение от KAMLS Посмотреть сообщение
fflush(f);
не работает..
Это первый образец тестового кода. Там всё остальное под комментом, а fflush(f); не работает.
В этом вопрос. Почему?
KAMLS вне форума Ответить с цитированием
Старый 02.11.2018, 17:12   #30
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Я ж отвечал...
1. Да, rb - чтение, а есть w+b и запись, и чтение. Читайте описание используемых функций https://en.cppreference.com/w/cpp/io/c/fopen
2. Не работает, т.к. файл открыть для записи. Флуш отрабатывает правильно там.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись объекта в файл Sheffdmb2010 Общие вопросы C/C++ 9 31.05.2013 19:54
Запись объекта в файл CodeNOT PHP 5 22.06.2011 13:15
Хранение в векторе объектов пользовательского класса jennya Visual C++ 4 03.10.2010 19:16
[PHP] Запись класса в файл Ramirag PHP 3 21.04.2010 00:40
Массив эллементов пользовательского класса windzor Общие вопросы .NET 4 02.03.2010 19:53