Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Для забавы =)


Автор: FTK 12.12.2005, 14:44
Hello world
Написал ф-цию факториала, получил забавный результат
Код

#include <iostream>

using namespace std;

int fac(int a)
{
    //if (a==0) return 1;
    switch (a)
    {
        case '0': return 1;
        case '1': return 1;    
        default:  int fac=1; for (int i=a; i!=1; --i) fac*=i; return fac;
    }
}

int main()
{
    int x;
Z: cout<<"input x"<<endl;
   cin>>x; if(x<0) {cout<<"x must be >=0"<<endl; goto Z;}
    cout<<"factorial x ="<<fac(x)<<endl;
    goto Z;
    return 0;
}

Попробуйте ввести --1.
Почему такое получается?

Автор: pablo 12.12.2005, 14:47
получается что ?
Добавлено @ 14:48
нормальное сообщение что число должно быть >= 0

Автор: FTK 12.12.2005, 14:58
Может у меня с++ какой-то тупой???
У меня в консоли появляется бесконечное количество сообщений, и не останавливается....

Автор: Aleksandor 12.12.2005, 15:09
А как же иначе если там бесконечный цикл??

Автор: Neitron 12.12.2005, 15:20
О боже=)))))))))))))) goto
А ELSE уже не рулит и while

Автор: sergejzr 12.12.2005, 15:23
Модератор: Название темы должно отражать ее суть!

Автор: FTK 12.12.2005, 19:32
Aleksandor
Нет, там выскакивает сообщение о том, что х д.б. >0
И все это не останавливается при вводе цифры, начинающейся с "--"

Автор: sergejzr 12.12.2005, 19:48
Цитата(FTK @ 12.12.2005, 13:44)
Почему такое получается?

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

Автор: Neitron 12.12.2005, 19:54
Мммм, невольно не хочу вмешиваться... но=))))
Отрицательные числа, они тоже целые.

Автор: FTK 12.12.2005, 19:54
sergej.z\
А для отрицательных чисел работает...
А для -- нет. Если поставить "--" число станет не целым?

Автор: sergejzr 12.12.2005, 19:58
-1 это число.
--1 это не число, а действие
Добавлено @ 20:00
Парсер cin понимает только один знак перед цифрой, потому что он так определён. Иначе он должен был бы понимать извращения типа -(-1) и -(+(+1)) итд. Из за чего он бы тормозил на простых действиях. Поэтому если хотите извращений - перекладывайте оператор >> для них smile

Автор: FTK 12.12.2005, 20:08
sergej.z
круто! теперь вопрос снят

Автор: sergejzr 12.12.2005, 20:25
А Для проги - читай строку и делай atoi() потом.

Автор: FTK 12.12.2005, 20:38
sergej.z
Извиняюсь, но не в курсе, про atoi()...

Автор: sergejzr 12.12.2005, 20:51
Код

#include <stdlib.h>

char[256] stroka;
cin>>stroka;
int result=atoi(stroka);


правда 0 будет и если строка числом не являлась.

ещё лучше исgользовать
Код

char * hlp=&(stroka[0]);
int result = strtol (stroka, &hlp, 10);
if(*hlp!=0) return -1;//введено не число

cout<<result;

Автор: FTK 12.12.2005, 21:00
thanks for all

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)