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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как избавится от зацикливания, Программа зацикливается, как решить 
V
    Опции темы
Альдорон
Дата 31.5.2011, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Написал программу, но не знаю как избавится от её зацикливания
Ниже приведен кусок кода

Код

#include <stdio.h> /*стандартный заголовочный файл ввода/вывода*/
#include <math.h>  /*для выполнения простых математических операций*/
#include <conio.h> /*для getch()*/
#include <locale.h> /* для setlocale()*/
void main()
{
    int n,I,R,U,I1,I2,I3,I4,I5,I6,I7,I8,I9,R1,R2,R3,R4,R5,R6,R7,R8,R9,q,g;/*Перечисление переменных*/
    setlocale(LC_ALL, "");/*функци для вывода русского языка*/
    wprintf (L"%s\n",L"Это программа для рассчета напряжения в электро цепи");
    wprintf (L"%s\n",L"для начала работы нажмите <ENTER>");
    getchar();  /*ждем ввод*/
    LOOP:
    setlocale(LC_ALL, "");
    wprintf (L"%s\n",L"Введите количество узлов в цепи (от 1 до 10)");
    wscanf    (L"%d",&n);
    /*Далее идет варианты вычисления в зависимости*/ 
    /*от количества узловых точек в электро цепи*/
    switch (n)
    {
        case 1: 
                    wprintf (L"%s\n", L"Введите I");
                    wscanf  (L"%d",&I);
                    wprintf (L"%s\n", L"Введите R");
                    wscanf  (L"%d",&R);
                    U=I*R;    /*рассчетная формула для двух переменных*/
                    printf    ("%s\n","*********************************************");
                    printf    ("U = %d\n", U);/*вывод ответа*/
                    wprintf (L"%s\n", L"Для продолжения работы нажмите <g>,для выхода нажмите <q>");
                    wscanf    (L"%d",&q);
                    wscanf    (L"%d",&g);
                    if(g);
                    goto LOOP;
                    if(q);
                    getch();
                    break;
        case 2:
                    wprintf (L"%s\n", L"Введите I");
                    wscanf  (L"%d",&I);
                    wprintf (L"%s\n", L"Введите I1");
                    wscanf  (L"%d",&I1);
                    wprintf (L"%s\n", L"Введите R");
                    wscanf  (L"%d",&R);
                    wprintf (L"%s\n", L"Введите R1");
                    wscanf  (L"%d",&R1);
                    U=I*R+I1*R1;/*рассчетная формула для четырех переменных*/
                    printf    ("%s\n","*********************************************");
                    printf    ("U = %d\n", U);
                    wprintf (L"%s\n", L"Для продолжения работы нажмите <g>,для выхода нажмите <q>");
                    wscanf    (L"%d",&q);
                    wscanf    (L"%d",&g);
                    if(g);
                    goto LOOP;
                    if(q);
                    getch();
                    break;    


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


Законченный романтик
***


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

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



Всё просто - напишите программу не используя goto и вы поймёте.

А вообще вот этот кусочек кода поправьте и поидее заработает...

Код

if(g) 
goto LOOP;
if(q)
{
getch();
break;
}  


P.S. не компилил, так на ходу разбирал, вроде верно...


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
Альдорон
Дата 31.5.2011, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А подскажите как без goto добиться того чтобы программа возвращалась в начало?
PM MAIL   Вверх
awesome
Дата 1.6.2011, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Альдорон @  31.5.2011,  23:07 Найти цитируемый пост)
А подскажите как без goto добиться того чтобы программа возвращалась в начало? 


Код

#include <stdio.h> /*стандартный заголовочный файл ввода/вывода*/
#include <math.h>  /*для выполнения простых математических операций*/
#include <conio.h> /*для getch()*/
#include <locale.h> /* для setlocale()*/
void main()
{
    int n,I,R,U,I1,I2,I3,I4,I5,I6,I7,I8,I9,R1,R2,R3,R4,R5,R6,R7,R8,R9;/*Перечисление переменных*/
    char ch = ' ';
    setlocale(LC_ALL, "");/*функци для вывода русского языка*/
    wprintf (L"%s\n",L"Это программа для рассчета напряжения в электро цепи");
    wprintf (L"%s\n",L"для начала работы нажмите <ENTER>");
    getchar();  /*ждем ввод*/
    setlocale(LC_ALL, "");
    while(ch != 'q')
    {
    wprintf (L"%s\n",L"Введите количество узлов в цепи (от 1 до 10)");
    wscanf    (L"%d",&n);
    /*Далее идет варианты вычисления в зависимости*/ 
    /*от количества узловых точек в электро цепи*/
    switch (n)
    {
        case 1: 
                    wprintf (L"%s\n", L"Введите I");
                    wscanf  (L"%d",&I);
                    wprintf (L"%s\n", L"Введите R");
                    wscanf  (L"%d",&R);
                    U=I*R;    /*рассчетная формула для двух переменных*/
                    printf    ("%s\n","*********************************************");
                    printf    ("U = %d\n", U);/*вывод ответа*/
                    wprintf (L"%s\n", L"Для продолжения работы нажмите <g>,для выхода нажмите <q>");
                    wscanf    (L"%s",&ch);
                    break;
        case 2:
                    wprintf (L"%s\n", L"Введите I");
                    wscanf  (L"%d",&I);
                    wprintf (L"%s\n", L"Введите I1");
                    wscanf  (L"%d",&I1);
                    wprintf (L"%s\n", L"Введите R");
                    wscanf  (L"%d",&R);
                    wprintf (L"%s\n", L"Введите R1");
                    wscanf  (L"%d",&R1);
                    U=I*R+I1*R1;/*рассчетная формула для четырех переменных*/
                    printf    ("%s\n","*********************************************");
                    printf    ("U = %d\n", U);
                    wprintf (L"%s\n", L"Для продолжения работы нажмите <g>,для выхода нажмите <q>");
                    wscanf    (L"%s",&ch);
                    break;   
    }
    }
}


Это сообщение отредактировал(а) awesome - 1.6.2011, 05:43
PM MAIL   Вверх
bsa
Дата 1.6.2011, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Зачем setlocale вызывается более 1 раза? Да еще и в цикле!
PM   Вверх
awesome
Дата 1.6.2011, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(bsa @  1.6.2011,  10:34 Найти цитируемый пост)
Зачем setlocale вызывается более 1 раза? Да еще и в цикле! 

Это к кому вопрос? =)
PM MAIL   Вверх
bsa
Дата 2.6.2011, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



awesome, к ТС, конечно smile
PM   Вверх
awesome
Дата 3.6.2011, 05:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Так это чтобы наверняка, контрольный так сказать smile 
PM MAIL   Вверх
Dov
Дата 3.6.2011, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



Цитата(Альдорон @  31.5.2011,  21:05 Найти цитируемый пост)
Написал программу, но не знаю как избавится от её зацикливания

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

Цитата(Альдорон @  31.5.2011,  23:07 Найти цитируемый пост)
А подскажите как без goto добиться того чтобы программа возвращалась в начало?

Показую ещё раз...
Код
int main()
{
    int    I, R, n, U;

    while(true)
    {
        printf("enter the number of nodes (from 1 to 10): ");
        scanf("%d", &n);

        U = 0;
        for(char i = ' '; n; (i == ' ' ? i = '1' : ++i), n--)
        {
            printf("enter I%c: ", i);
            scanf("%d", &I);
            printf("enter R%c: ", i);
            scanf("%d", &R);
            U += I * R;
        }
        printf("U = %d\n", U);

        fflush(stdin);
        printf("\npress <q> to quit or any key to continue\n");
      
        if(tolower(getch()) == 'q')
            break;
    }
    return 0;
}






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

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

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

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

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


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

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


 




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


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

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