• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Считывает Из Текстового Файла Не То Значение, Которое Там Есть

  • Автор темы yurk84
  • Дата начала
Y

yurk84

Здравствуйте! В текстовом файле содержится число 525075, а при его чтении выдаётся 787. Не могу понять в чём здесь может быть дело? У кого-нибудь есть мысли на сей счёт? Запись в файл и чтение из него делается посредством компилятора BC v3.1
Заранее спасибо.
 
Y

yurk84



C++:
void num_spin_write ( unsigned long int &allspins )
{
printf("FINISH SPIN OF PROGRAMM = %lu", allspins);

ofstream G;

G.open("C:\\BC\\BIN\\ES-1X5S\\N_spin.txt");

if (G)
G << allspins;

G.close();
}



C++:
int num_spin_read()

{
unsigned long int num_of_spin;

ifstream F;

F.open("C:\\BC\\BIN\\ES-1X5S\\N_spin.txt");

if (F)
F >> num_of_spin;

F.close();

return num_of_spin;
}

Я уже понял что ошибка как-то связана с неправильным либо чтением из файла, либо отображением прочитанного, поскольку нулевой сдвиг числа 525075 как ни странно есть число 787!
 
R

rrrFer

Код:
#include <fstream>
#include <iostream>
int rd( unsigned long int &value, char *fname );
int wr( unsigned long int value, char *fname );
int main() {
unsigned long int value_1, value_2,
error;
value_1 = 525075;

error = wr( value_1, "tst.txt" );
if( 0 != error )
return error;

error = rd( value_2, "tst.txt" );
if( 0 != error )
return error;

std ::cout << value_1 << std ::endl << value_2 << std ::endl;

return 0;
}
int rd( unsigned long int &value, char *fname ) {
std ::ifstream ifst( fname );
if( 0 == ifst )
return -1;
ifst >> value;
ifst .close();
return 0;
}
int wr( unsigned long int value, char *fname ) {
std ::ofstream ofst( fname );
if( 0 == ofst )
return -1;
ofst << value;
ofst .close();
return 0;
}
 
Y

yurk84

Спасибо за код. Но всё же мне до сих пор не ясно в чём возникла проблема. Я написал коротенькую прогу где как раз получаю 2 разных значения в зависимости какой спецификатор вывода я пишу:

C++:
#include <conio.h>
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>

void main (void)
{

clrscr();

unsigned long int chislo1 = 525075;
unsigned long int chislo2;

chislo2 = chislo1 >> 0;

printf("Chislo2 = %lu", chislo2);

getch();
}

В этом примере выводится как и требуется 525075, а вот в этом примере выводится 787:
C++:
#include <conio.h>
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>

void main (void)
{
clrscr();
unsigned long int chislo1 = 525075;
unsigned long int chislo2;

chislo2 = chislo1 >> 0;

printf("Chislo2 = %d", chislo2);

getch();

}

Может мне можно как-то помочь без изменения кода функций ввода-вывода, поскольку они выполнены в стиле C++, а я пока владею только С.
 
Y

yurk84

Я НАШЁЛ ОШИБКУ! Я ПОНЯЛ В ЧЁМ ДЕЛО! Для функции чтения нужно поставить возвратный тип unsigned long int, а не int, как впрочем и у Вас неверно, поскольку функции тоже идут с возвратом int, а надо unsigned long int.
C++:
unsigned long int num_spin_read();

Вот теперь всё верно работает!!!
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!