1 Востаннє редагувалося Komiks (26.12.2013 22:31:18)

Тема: Рандом

В мене э завдання: записати у бінарний файл рандомні 10 чисел.
Я створив файл блокнот у папці з моєю лабою. Потім написав такий код

#include "stdafx.h"
#include <stdio.h> //header file for input-output 
#include <iostream>
#include <time.h> //header file for stream processing
void lab14()
{
    int m;
    srand(time(NULL));
    FILE*ffile;
    fopen_s(&ffile,"testfile1","r+");
    for(int m=0;m<10;m++)
        m=rand() % 10;
    printf("Tttt\n");
    getchar();
    
}

Підкажіть у чому помилка і як її виправити.

2 Востаннє редагувалося koala (26.12.2013 22:32:07)

Re: Рандом

Почнемо з того, що вказати, чому ви вважаєте, що тут є помилка, маєте ви. Якщо ви не бачите жодних проблем в роботі програми - здавайте. Якщо бачите - описуйте.
По-друге, в умові сказано

записати у бынарний файл рандомны 10 чисел.

Скажіть, де саме у вас ці числа записуються в файл? Якщо ніде - то, виходить, ви навіть і не намагалися самі вирішити свою проблему.
За зміну параметру циклу в циклі я взагалі краще помовчу...

3

Re: Рандом

koala написав:

Почнемо з того, що вказати, чому ви вважаєте, що тут є помилка, маєте ви. Якщо ви не бачите жодних проблем в роботі програми - здавайте. Якщо бачите - описуйте.
По-друге, в умові сказано

записати у бынарний файл рандомны 10 чисел.

Скажіть, де саме у вас ці числа записуються в файл? Якщо ніде - то, виходить, ви навіть і не намагалися самі вирішити свою проблему.
За зміну параметру циклу в циклі я взагалі краще помовчу...

Ну повинні наче записатися у блокнот, який я створив. Тоді таке питання. Якщо я створив блокнот, то коли я напишу правильну программу, вона в цей документ будет писати 10 рандомних чисел?

4 Востаннє редагувалося koala (26.12.2013 22:47:47)

Re: Рандом

Ви не створюєте блокнот. Розберіться із типами файлів. Текстовий файл - це текстовий файл, а блокнот - програма для редагування текстових файлів. І ваша програма має сама створити файл, до того ж не текстовий.
Ну і звісно коли ви напишете правильну програму, то вона буде робити все у відповідності до умови.
P.S. Вам не printf, а fwrite потрібен, а у текстових файлів в Windows розширення зазвичай txt.

5

Re: Рандом

koala написав:

Ви не створюєте блокнот. Розберіться із типами файлів. Текстовий файл - це текстовий файл, а блокнот - програма для редагування текстових файлів. І ваша програма має сама створити файл, до того ж не текстовий.
Ну і звісно коли ви напишете правильну програму, то вона буде робити все у відповідності до умови.
P.S. Вам не printf, а fwrite потрібен, а у текстових файлів в Windows розширення зазвичай txt.

#include "stdafx.h"
#include <stdio.h> //header file for input-output 
#include <iostream>//header file for stream processing
#include <time.h>
void main()
{
int m;
FILE *ffile; //file variable
ffile=fopen("D:\\test.dat", "wb"); 
srand(time(NULL));
for(int m=0;m<10;m++)
{
    
    fwrite(&m,sizeof(10),1,ffile);
    m=rand() % 10;
    printf("Tttt\n");

}
fclose(ffile); //close the file
system("pause");
}

Краще?

6

Re: Рандом

Komiks написав:

Краще?

Пане, це ваша програма, вам її здавати. Звідки я знаю, що для вас краще? Я не ваш викладач. Ставте конкретні питання.

7

Re: Рандом

koala написав:
Komiks написав:

Краще?

Пане, це ваша програма, вам її здавати. Звідки я знаю, що для вас краще? Я не ваш викладач. Ставте конкретні питання.

Коли я компілюю, видає таку помилку
c:\users\егор\documents\visual studio 2012\projects\a\a\a.cpp(13): warning C4244: аргумент: преобразование "time_t" в "unsigned int", возможна потеря данных
З чим вона пов`язана?

8

Re: Рандом

По-перше, не помилка (error), а попередження (warning). З попередженнями можна жити, хоча бажано їх виправляти.
По-друге, time_t (тип даних для часу) довший за unsigned int, тому іде втрата даних. Нам ці дані не дуже потрібні, тому можна просто написати

srand((unsigned int)time(NULL));

Таке перетворення теж не радять робити, але попередження не буде, бо перетворення явне (тобто ми прямо вказуємо компілятору, що дані втрачаються свідомо).

9

Re: Рандом

і спочатку обчислюйте число, а потім записуйте його в файл. Логічно ж так, правда?

10

Re: Рандом

koala написав:

і спочатку обчислюйте число, а потім записуйте його в файл. Логічно ж так, правда?

Це маєте на увазі?
m=rand() % 10;
fwrite(&m,sizeof(10),1,ffile);

Подякували: koala1