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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выход из цикла 
V
    Опции темы
Crafty
Дата 2.7.2009, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Можно ли в этом коде сделать так чтобы при вводе 0 и 0 сразу же выходить из цикла?
Попробовал делать так 
Код
scanf("%d %d", &n, &m);
 но тогда одна из строк не заполняется.

Код

#include <stdio.h>

int main()
{
    char field[10][10];
    int n, m, i;
    
    scanf("%d %d\n", &n, &m);
    while(n != 0 || m != 0)
    {
        for(i = 0; i != n; ++i)
            gets(field[i]);

        for(i = 0; i != n; ++i)
            puts(field[i]);

        scanf("%d %d\n", &n, &m);
    }
    
    return 0;
}


Посоветуйте может быть как-то по-другому можно заполнить массив.
PM MAIL   Вверх
andrew_121
Дата 2.7.2009, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

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



Crafty, Код корявый до невозможного! Объясни что требуется изначально.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Crafty
Дата 2.7.2009, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вообщем пытаюсь решить задачу в целом алгоритм решения мне понятен, но немогу разобраться с заполнением массива.
PM MAIL   Вверх
andrew_121
Дата 2.7.2009, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

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



Crafty, Лень читать твою задачу.
Размерность массива?
Откуда читать?
Какой тип массива?
И что еще?


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Crafty
Дата 2.7.2009, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Входные данные сосотоят из произвольного числа полей. Первая строка каждого поля содержит два целых числа m и n 0 < n, m <= 100), которые соответствуют числу чтрок и стобцов поля соответственно. Каждая из последующих n строк содержит ровно m символов, представляя собой поле.
Безопасные клеточки обохначаются "." , мины обозначаются "*" , и то и другое без кавычек. Первая строка поля, где n = m = 0, представляет собой окончание входных данных и обрабатываться не должна(проблема только в этом месте пока).


PM MAIL   Вверх
andrew_121
Дата 2.7.2009, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

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



Если я тебя правильно понял:
Код

#include <stdio.h>
int main()
{
    char field[10][10];
    int n, m, i;
    
    scanf("%d %d\n", &n, &m);
    while(n != 0 || m != 0)
    {
        for(i = 0; i != n; ++i)
            gets(field[i]);
        for(i = 0; i != n; ++i)
            puts(field[i]);
        scanf("%d %d\n", &n, &m);
        if ( !n && !m )
           break;
    }
    
    return 0;
}



--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Crafty
Дата 2.7.2009, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



andrew_121, тут опять получается что для выхода мне нужно вводить два раза строку "0 0".
PM MAIL   Вверх
andrew_121
Дата 2.7.2009, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

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



Crafty, Ты по какому условию хочешь выйти?


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Crafty
Дата 2.7.2009, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(andrew_121 @  2.7.2009,  19:42 Найти цитируемый пост)
Crafty, Ты по какому условию хочешь выйти?

когда n = 0 и m = 0

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


Опытный
**


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

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



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

Код

#include <stdio.h>

char Field[102][102];

void Check(int, int);
void Reset(void);

int main()
{
    
    int n, m, i, j, t;

    t = 0;    
    scanf("%d %d\n", &n, &m);
    while(n != 0 || m != 0)
    {
        Reset();
        for(i = 1; i <= n; ++i)
            gets(&Field[i][1]);
        ++t;
        printf("Field #%d\n", t);
        for(i = 1; i <= n; ++i){
            for(j = 1; j <= m; ++j)
                Check(i, j);
            printf("\n");
        }
        scanf("%d %d\n", &n, &m);
    }
    
    return 0;
}

void Check(int n, int m)
{
    char ch = '0';
    if (Field[n][m] == '*')
        ch = '*';
    else {
        if (Field[n-1][m-1] == '*')
            ++ch;
        if (Field[n-1][m] == '*')
            ++ch;
        if (Field[n-1][m+1] == '*')
            ++ch;
        if (Field[n][m-1] == '*')
            ++ch;
        if (Field[n][m+1] == '*')
            ++ch;
        if (Field[n+1][m-1] == '*')
            ++ch;
        if (Field[n+1][m] == '*')
            ++ch;
        if (Field[n+1][m+1] == '*')
            ++ch;
    }

    printf("%c", ch);
}

void Reset(void)
{
    int i, j;
    for(i = 0; i <= 101; ++i)
        for(j = 0; j <= 101; ++j)
            Field[i][j] = ' ';
}

PM MAIL   Вверх
Crafty
Дата 2.7.2009, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Понял в чем ошибка  smile
Нужно было вместо gets использовать scanf


Код

/* 10189 - Minesweeper */
#include <stdio.h>

char Field[102][102];

void Check(int, int);
void Reset(void);

int main()
{
    
    int n, m, i, j, t;

    t = 0;    
    scanf("%d %d", &n, &m);
    while(n != 0 || m != 0)
    {
        Reset();
        for(i = 1; i <= n; ++i)
            scanf("%s",&Field[i][1]);
        ++t;
        printf("Field #%d:\n", t);
        for(i = 1; i <= n; ++i){
            for(j = 1; j <= m; ++j)
                Check(i, j);
            printf("\n");
        }
        scanf("%d %d", &n, &m);
    }
    
    return 0;
}

void Check(int n, int m)
{
    char ch = '0';
    if (Field[n][m] == '*')
        ch = '*';
    else {
        if (Field[n-1][m-1] == '*')
            ++ch;
        if (Field[n-1][m] == '*')
            ++ch;
        if (Field[n-1][m+1] == '*')
            ++ch;
        if (Field[n][m-1] == '*')
            ++ch;
        if (Field[n][m+1] == '*')
            ++ch;
        if (Field[n+1][m-1] == '*')
            ++ch;
        if (Field[n+1][m] == '*')
            ++ch;
        if (Field[n+1][m+1] == '*')
            ++ch;
    }

    printf("%c", ch);
}

void Reset(void)
{
    int i, j;
    for(i = 0; i <= 101; ++i)
        for(j = 0; j <= 101; ++j)
            Field[i][j] = ' ';
}


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

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

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

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

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


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

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


 




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


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

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