Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> запись результата в файл 
:(
    Опции темы
Luster
Дата 5.8.2015, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 29.7.2015

Репутация: нет
Всего: нет



Доброе время суток! Не получается записать результат в файл, на экран выводится а в файл не хочет. Есть идеи? (В файле должно быть 1 число - количество островков).


Код



#include <stdio.h>
#include <Windows.h>
#include <fstream>
 
void deleteIsland(char **mat, int r, int c, int msize)
{
if (mat[c][r] == 0)
return;
mat[c][r] = 0;
if (c > 0)
deleteIsland(mat, r, c - 1, msize);
if (c < msize - 1)
deleteIsland(mat, r, c + 1, msize);
if (r > 0)
deleteIsland(mat, r - 1, c, msize);
if (r < msize - 1)
deleteIsland(mat, r + 1, c, msize);
}
 
int islandsCount(char **mat, int size)
{
int result = 0;
for (int c = 0; c < size; ++c)
for (int r = 0; r < size; ++r)
if (mat[c][r] != 0)
{
++result;
deleteIsland(mat, r, c, size);
}
return result;
 
}
int main(void)
{
int msize = 0;
int r, c;
FILE* fp = fopen("1.txt", "r");
if (!fp)
return 1;
fscanf(fp, "%2d", &msize);
fgetc(fp);
if (!msize)
{
fclose(fp);
return 2;
}
 
char** mat = new char*[msize];
for (r = 0; r < msize; r++)
mat[r] = new char[msize];
 
char buf[255];
char* str;
 
memset(buf, '\0', sizeof(buf));
for (r = 0; fgets(buf, sizeof(buf), fp); r++)
{
for (c = 0, str = strtok(buf, " "); str; str = strtok(NULL, " "), c++)
mat[r][c] = atoi(str);
}
fclose(fp);
printf("%i", islandsCount(mat, msize));
 
FILE *file;
file = fopen("2.txt" ,"w");
\\ строка записи, но что бы не писал - ошибка 
    fclose(fp);
 
return 0;
}


PM MAIL   Вверх
xvr
Дата 5.8.2015, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Строка 67 - не тот файл закрыли
Строка 62 - напечатали результат на экран и забыли. Что будете выводить в файл? (Подсказка - сделайте переменную для хранения результата)
Строка 66 (загадочная) - что же все таки пробовали в ней писать ?

PM MAIL   Вверх
Luster
Дата 5.8.2015, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 29.7.2015

Репутация: нет
Всего: нет



в строке 67 да, там будет fopen, а не fp, в строке 66 пытался сделать запись, в какой бы форме не писал, ошибки. Вы написали сделать переменную для записи, по подробней можно? или пример? Сейчас она типа char и если я на прямую к ней обращаюсь то ошибка  видимости, делая её глобальной, другая ошибка.
PM MAIL   Вверх
feodorv
Дата 5.8.2015, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(Luster @  5.8.2015,  17:47 Найти цитируемый пост)
Сейчас она типа char и если я на прямую к ней обращаюсь то ошибка  видимости, делая её глобальной, другая ошибка. 

Это вообще о чем?


Цитата(Luster @  5.8.2015,  13:41 Найти цитируемый пост)
\\ строка записи, но что бы не писал - ошибка 
Код
fprintf( file, ...);




--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Luster
Дата 5.8.2015, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 29.7.2015

Репутация: нет
Всего: нет



Код


FILE *file;
file = fopen("1.txt" ,"w");
  fprintf(file, "%d", (вот тут должен быть аргумент, который записывается, если пишу result - ошибка, если я вообще в записи указываю переменную result - ошибка);
    fclose(file);


Это сообщение отредактировал(а) Luster - 5.8.2015, 18:43
PM MAIL   Вверх
TarasProger
Дата 5.8.2015, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 5.8.2015

Репутация: нет
Всего: нет



Luster, 
Цитата(Luster @  5.8.2015,  13:41 Найти цитируемый пост)
Доброе время суток! Не получается записать результат в файл, на экран выводится а в файл не хочет. Есть идеи? (В файле должно быть 1 число - количество островков).
Так а что ты хочешь, закрыв файл до того, как массив был хотябы заполнен? Ксати, зачем ты это количество у юзверя то спрашиваешь?


Это сообщение отредактировал(а) TarasProger - 5.8.2015, 19:16
PM MAIL   Вверх
feodorv
Дата 5.8.2015, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(Luster @  5.8.2015,  18:43 Найти цитируемый пост)
вот тут должен быть аргумент, который записывается, если пишу result - ошибка, если я вообще в записи указываю переменную result - ошибка

Так переменная result у Вас определена в функции islandsCount(), каким образом она может участвовать в деятельности main()???


Начните хотя бы с двойной работы:
Код
fprintf(file, "%d", islandsCount(mat, msize));
Но здесь Вы второй раз вычисляете искомое. Как избежать этого, подсказал xvr:
Цитата(xvr @  5.8.2015,  14:26 Найти цитируемый пост)
Подсказка - сделайте переменную для хранения результата




--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Luster
Дата 6.8.2015, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 29.7.2015

Репутация: нет
Всего: нет



так при записи в файл - записывает 0, вместо нужного числа.
Код

fprintf(file, "%d", islandsCount(mat, msize));


Я сделал, в самой функции islandsCount вывод. Работает. 
Всем спасибо за помощь.
PM MAIL   Вверх
feodorv
Дата 6.8.2015, 01:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(Luster @  6.8.2015,  00:30 Найти цитируемый пост)
так при записи в файл - записывает 0, вместо нужного числа.

Ну да, Вы же состояние матрицы меняете. В результате два вызова islandsCount() неравнозначны.


Цитата(Luster @  6.8.2015,  00:30 Найти цитируемый пост)
Я сделал, в самой функции islandsCount вывод.

Напрасно. Это не дело islandsCount() выводить в файл. Вообще не понятно, в чем причина затруднения, разве что готового кода не приведено:
Код

int main(void)
{
  ...
  int result = islandsCount(mat, msize);
  printf( "Result = %d\n", result);

  FILE *file = fopen("2.txt" ,"w");
  if( file != NULL )
  {
    fprintf( file, "%d", result);
    fclose(file);
  }
  ...
}

Это настолько сложно???


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Luster
Дата 6.8.2015, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 29.7.2015

Репутация: нет
Всего: нет



Код

int main(void)
{
  ...
  int result = islandsCount(mat, msize);
  printf( "Result = %d\n", result);
  FILE *file = fopen("2.txt" ,"w");
  if( file != NULL )
  {
    fprintf( file, "%d", result);
    fclose(file);
  }
  ...
}

так записывает островок на 1 больше.
PM MAIL   Вверх
feodorv
Дата 7.8.2015, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(Luster @  6.8.2015,  23:47 Найти цитируемый пост)
так записывает островок на 1 больше. 

Да ладно. Вы-то сами в ручную посчитали, сколько у Вас островков? Давайте свой файл 1.txt, посчитаем вместе.


Цитата(Luster @  6.8.2015,  00:30 Найти цитируемый пост)
Я сделал, в самой функции islandsCount вывод. Работает. 

В каком точно месте islandsCount() Вы сделали вывод в файл?


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0614 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.