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

Тема в разделе "Общие вопросы по С и С++", создана пользователем yurk84, 21 апр 2012.

  1. yurk84

    yurk84 Гость

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

    vol4ek88 Гость

    код в студию!
     
  3. yurk84

    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!
     
  4. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Код (Text):
    #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;
    }
     
  5. yurk84

    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++, а я пока владею только С.
     
  6. yurk84

    yurk84 Гость

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

Поделиться этой страницей