Кодировка При Записи/считывании В Файл/из Файла Функциям Fread И Fwrit

Тема в разделе "MS Visual C++", создана пользователем Niaden, 29 окт 2012.

  1. Niaden

    Niaden New Member

    Регистрация:
    29 окт 2012
    Сообщения:
    1
    Симпатии:
    0
    Добрый день. Нижеприведенные проги (прога №1 с fread,fwrite и прога №2 с fscanf,fprintf) записывают в файл 5 целых чисел. Из этого же файла считывают эти числа и выводит их на stdout. Обе проги работают нормально. Только вот, почему, когда после записи в файл in.txt посредством fwrite в проге №1, я открываю файл и вижу там "{ кяяя- цяяя7 " вместо "123 -22 301 -10 55", в то время как прога №2 записывает в файл out.txt "123 -22 301 -10 55" вместо всякой белиберды?

    тоже самое происходит, если я попытаюсь ручками напечатать в блокноте 5 целых чисел через пробел, сохраню его, а потом попытаюсь прочитать это с помощью fread, где *ptr будет указывать на массив из 5и элементов типа инт, в то время как fscanf-ом это отлично читается. Тип char fread читает с блокнота без проблем. По-скольку не могу нормально считывать целые числа из текстовых редакторов с помощью fread, то не могу и структуры с целыми числами считывать. застопорился, вообщем :'(
    Подскажите, в чем дело? покопался в интернете, ответа не нашел( в примерах это не описывается.

    и если можно, объясните разницу между "wt" и "wb". Знаю, что t - текстовый, а b - двоичный.
    прочитал, что :
    "Файл можно открывать либо в текстовом, либо в двоичном режиме. В текстовом режиме выполняются преобразования некоторых символов. Например, символы новой строки преобразуются в комбинацию кодов возврата каретки (ASCII 13) и конца строки (ASCII 10). В двоичном режиме подобные преобразования не выполняются."
    Разве разница только в обработке символов перехода на новую строку? не могу уловить суть
    если можно, какие-то примеры приведите. буду благодарен...



    *********************************** ****************
    ПРОГА с FREAD,WRITE
    *********************************** ***************

    Код (C++):
    #include <stdio.h>
    #include <stdlib.h>
    int main(void)
    {
    FILE *fp;
    int array_to_output[5] = { 123, -22, 301, -10, 55};
    int array_to_input[5];
    int i;

    /* запись  значений  */
    if ( ( fp = fopen("c:\\in.txt", "wb") ) == NULL)             //c "wt" тоже пробовал
    {
    printf("He удается открыть файл. \n");
    exit(1);
    }
    if ( fwrite(array_to_output, sizeof(int) , 5, fp) != 5)
    printf( "Ошибка при записи файла." );
    fclose(fp);

    /* чтение значений */
    if ((fp = fopen("c:\\in.txt", "rb")) == NULL)
    {
    printf( "He удается открыть файл.\n" );
    exit(1);
    }
    if (fread(array_to_input, sizeof(int), 5, fp) != 5)
    {
    if ( feof( fp ) )
    printf("Преждевременное достижение конца файла.");
    else
    printf("Ошибка при чтении файла.");
    }
    fclose(fp);

    for( i=0; i<5; i++)
    printf( "%d ", array_to_input[i]);

    return 0;
    }

    *********************************** ****************
    ПРОГА со FSCANF, FPRINTF
    *********************************** ***************
    Код (C++):
    #include <iostream>

    using namespace std;

    int main()
    {
    FILE *in, *out;
    int array_to_input[5];
    int array_to_output[5] = { 123, -22, 301, -10, 55};
    int i;

    if ( ( out = fopen("c:\\out.txt","wb")) == NULL)
    {
    fprintf( stderr, "nevozmojno otkrit' fail dlya zapisi" );
    exit(1);
    }
    for (i=0; i<5; i++)
    fprintf( out, "%d ",array_to_output[i] );
    fclose(out);

    if ( ( in = fopen("c:\\out.txt","rb")) == NULL)      
    {
    fprintf(stderr,"nevozmojno otkrit' fail dlya 4teniya");
    exit(1);
    }
    for ( i=0; i<5; i++)
    {
    fscanf( in, "%d",&array_to_input[i] );
    cout << "array_to_input[i] = " << array_to_input[i] << " ";
    if ( (i + 1 ) % 2 == 0)
    cout << '\n';
    }
    cout << '\n';
    fclose(in);
    return 0;
    }
    среда - Visual Studio 2010 C++
     
  2. Niaden

    Niaden New Member

    Регистрация:
    29 окт 2012
    Сообщения:
    1
    Симпатии:
    0
    разобрался.
    скачал редактор двоичных файлов, открыл им in.txt. все стало на свои места.
     
Загрузка...
Похожие Темы - Кодировка При Записи
  1. NickProstoNick
    Ответов:
    6
    Просмотров:
    155
  2. R4z0R
    Ответов:
    17
    Просмотров:
    1.498
  3. PaKo
    Ответов:
    1
    Просмотров:
    1.077
  4. AndreyS
    Ответов:
    7
    Просмотров:
    3.284
  5. NetWood
    Ответов:
    7
    Просмотров:
    2.451

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