Горещ картоф В клас

38 views
Skip to first unread message

Puh Puhalev

unread,
Jun 17, 2013, 2:08:49 PM6/17/13
to prog1...@googlegroups.com
Някой може ли да ми обясни защо ето това
while ((c = getchar()) != ' ')
{
if(c >= '0' && c <= '9')
{
digit = 10 * digit + (c - '0');
}
}

при вход 1 2 3, 4 ми дава безкраен цикъл?

Nedelcho Delchev

unread,
Jun 17, 2013, 3:23:14 PM6/17/13
to prog1...@googlegroups.com
Ами доколкото виждам грешката ти е в while-a според мен е хубаво да го направиш: while ((c = getchar()) != EOF) и просто, когато срешнеш запетая, някаква променлива да става 1 и правиш if(когато променливата е 0) и if(когато променливата е 1).

Оставям те нататък сам, ако имаш въпроси питай :D.

Кристиян Попов

unread,
Jun 18, 2013, 12:00:31 PM6/18/13
to prog1...@googlegroups.com
Това като гледам е част от блока за въвеждане на числа от файл. Само по себе си този блок ще работи няма пречка , но аз направих същото като промених алгоритъма за въвеждането на числата. Ако си се опитал да направиш кода който съм написал , няма как да стане ето защо:

      while((c = getchar()) != EOF) // Тук взимаш символите до край на файла , тук всичко е окей
      {
            digit = 0; //Това няма смисъл да го обяснявам
 
           while ((c = getchar()) != ' ');  //Тук е грешката разликата между do{ }while (изпълняват се действията първо , после се проверява условието на цикъла) и while{}
            {                                      //при който се проверява първо условието , после действието се извършва. Т.е. ти взимаш на ново следващия символ и излизаш от
                  if(c >= '0' && c <= '9')  //цикъла и отново влизаш във предния , където става отново същото и ти в крайна сметка не излизаш , даже подминаваш EOF и си четеш
                  {                                //нещо друго от паметта до безкрайност...
                    digit = 10 * digit + c - '0';
                  }
            }
           //Някаква операция със digit тук...
}
Reply all
Reply to author
Forward
0 new messages