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


Автор: KOVER 6.1.2011, 16:25
Доброе время суток. Я новичок пытаюсь научиться языку. Читаю книги и смотрю видео на youtube.
Платформа Windows 7.  Когда писал программу столкнулся с ошибкой. Все переписывал но она осталась. Вот в общем код.

При компиляции открывается какой то новый файл и 257 строка становиться красной хотя там всего лишь скобка.
Заранее спасибо.

Автор: triclosan 6.1.2011, 16:47
Цитата(KOVER @  6.1.2011,  16:25 Найти цитируемый пост)
 Когда писал программу столкнулся с ошибкой. Все переписывал но она осталась.

так, а в чем ошибка-то?

Автор: mes 6.1.2011, 16:47
Цитата(KOVER @  6.1.2011,  15:25 Найти цитируемый пост)
 Я непонимаю ошибку, Помогите решить проблему

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

Автор: Sosed 6.1.2011, 17:04
Может getc() = getch() ?

Автор: KOVER 6.1.2011, 17:07
Сам код:
Код

#include <iostream>
#include <conio.h>
#include <math>

using namespace std;

int main(int argc, char *argv[]){
    
    int x, correct, counter;
    srand(static_cast<unsigned int>(time(0)));
    correct = rand()%100+1;
    counter = 0;
    
    start:
    
    cout << "Dobryi den'! Ygadaite chislo ot 1 do 100";
    cin >> x;

    if(x == correct){
     cout << "Ura! Pobeda! " << counter << "Popitok!";
     getc();
     exit(0);
     }
     
else if(x > correct && x <= 100){
     
     cout << "Visoko!\n\n";
     counter++;
     goto start;
     
     }
     
    else if(x < correct && x >= 1){
     
     cout << "Nizko!\n\n";
     counter++;
     goto start; 
     
     }
     
     else{
     cerr << "NeopozHaHo chislo\n\n";
     goto start;
     }
   
   
   
   
   getch();
}



Вот ошибка во втором окне:
Код

_CRTIMP int __cdecl    _filbuf (FILE*);
_CRTIMP int __cdecl    _flsbuf (int, FILE*);

#if !defined _MT

__CRT_INLINE int __cdecl getc (FILE* __F)
{                                                                                      Выделяет эту строчку.
  return (--__F->_cnt >= 0)
    ?  (int) (unsigned char) *__F->_ptr++
    : _filbuf (__F);
}

__CRT_INLINE int __cdecl putc (int __c, FILE* __F)
{
  return (--__F->_cnt >= 0)
    ?  (int) (unsigned char) (*__F->_ptr++ = (char)__c)
    :  _flsbuf (__c, __F);
}

__CRT_INLINE int __cdecl getchar (void)
{
  return (--stdin->_cnt >= 0)


Текст ошибки:
строка(258) файл(Dev-Cpp\include\stdio.h)  Сообщение(too few arguments to function int getc(FILE))

Вот так вот=(

Добавлено через 50 секунд
У вас то есть работает? О_О

Автор: Estranged 6.1.2011, 17:11
getc(); на строке 21, после cout << "Ura! Pobeda! " << counter << "Popitok!";. Не хватает параметра или это все же getch();?

Автор: Фантом 6.1.2011, 17:19
Во-первых, у getc() должен быть параметр. Во-вторых, если уж Вы "пытаетесь научиться языку", сотрите этот ужас и напишите все сначала. Это не программа, а одна большая ошибка.

Автор: sergioK 6.1.2011, 17:20
Цитата(Estranged @ 6.1.2011,  17:11)
getc(); на строке 21, после cout << "Ura! Pobeda! " << counter << "Popitok!";. Не хватает параметра или это все же getch();?

getc - примимает stream 
у вас он void 

Автор: KOVER 6.1.2011, 17:28
Да да 21 строка спасибо большое!!!!

Фантом почему ужас это 3 программа в соей жизни! И каким способом мне учиться?

Добавил исправления. Удачи вам!

Автор: bsa 6.1.2011, 18:06

M
bsa
KOVER, если ответ на вопрос получен, то пометь тему решенной

Автор: Фантом 6.1.2011, 18:33
Цитата(KOVER @  6.1.2011,  17:28 Найти цитируемый пост)

Фантом почему ужас это 3 программа в соей жизни! 

Потому что:
1) Использовать goto без крайней необходимости не стоит. А на стадии обучения лучше вообще забыть про существование такой возможности, полезнее будет.
2) Писать программы лучше на каком-то одном языке. Если это C++ - стоило воспользоваться cin.get вместо getc. Поэтому определитесь, какой язык Вы учите (желательно - еще и какой стандарт этого языка), и не пытайтесь устраивать сборную солянку из всего сразу.
3) Стандарты даже одного языка полезно соблюдать, а Ваш код пригоден только для одного определенного кривого компилятора. Поэтому найдите какой-нибудь приличный и достаточно жестко следующий стандартам компилятор (компиляторы от MS таковыми не являются) и пользуйтесь им.

Автор: KOVER 6.1.2011, 19:31
Цитата(Фантом @ 6.1.2011,  18:33)
Цитата(KOVER @  6.1.2011,  17:28 Найти цитируемый пост)

Фантом почему ужас это 3 программа в соей жизни! 

Потому что:
1) Использовать goto без крайней необходимости не стоит. А на стадии обучения лучше вообще забыть про существование такой возможности, полезнее будет.
2) Писать программы лучше на каком-то одном языке. Если это C++ - стоило воспользоваться cin.get вместо getc. Поэтому определитесь, какой язык Вы учите (желательно - еще и какой стандарт этого языка), и не пытайтесь устраивать сборную солянку из всего сразу.
3) Стандарты даже одного языка полезно соблюдать, а Ваш код пригоден только для одного определенного кривого компилятора. Поэтому найдите какой-нибудь приличный и достаточно жестко следующий стандартам компилятор (компиляторы от MS таковыми не являются) и пользуйтесь им.

1) goto это единственное пока что я знаю=(
2) Спасибо я это учту=)
3) Ну мой код только лично для меня, ну и для друзей=)
Покажите тогда как должно быть, если не трудно то что вы написали...

P.S. Мнеб очень хотелось узнать как вы именно учились...

Автор: Фантом 6.1.2011, 20:22
Цитата(KOVER @  6.1.2011,  19:31 Найти цитируемый пост)

1) goto это единственное пока что я знаю=(

Но операторы циклов-то Вы знаете?

Цитата(KOVER @  6.1.2011,  19:31 Найти цитируемый пост)

3) Ну мой код только лично для меня, ну и для друзей=)

Сначала все так говорят  smile Только потом это очень часто входит в привычку.

Цитата(KOVER @  6.1.2011,  19:31 Найти цитируемый пост)

Покажите тогда как должно быть, если не трудно то что вы написали...

Ну вот, допустим, такой вариант (хотя он и несколько извращенный):
Код

#include<iostream>
#include<cstdlib>

using namespace std;

int main()
{
   
    srand(static_cast<unsigned int>(time(0)));
    int correct = rand()%100+1;
    int counter = 0;
    int x;
    
    cout << "Dobryi den'! Ygadaite chislo ot 1 do 100" << endl;
    cin >> x;
   
    while(x!=correct)
    {
      switch((x>0 && x<correct)+2*(x>correct && x<101))
      {
         case 1 : cout << "Nizko!\n\n"; counter++; break;
         case 2 : cout << "Visoko!\n\n"; counter++; break;
         default : cerr << "NeopozHaHo chislo\n\n";
      }    
      cin >> x;
    }

    cout << "Ura! Pobeda! " << counter << " Popitok!" << endl;
    cin.get();
    return 0;
 }



Цитата(KOVER @  6.1.2011,  19:31 Найти цитируемый пост)

P.S. Мнеб очень хотелось узнать как вы именно учились... 

Это было давно, и начинал я не с C++.

Автор: bsa 7.1.2011, 12:16
http://forum.vingrad.ru/index.php?show_type=forum&showtopic=269794&kw=faq-c++

Автор: KOVER 7.1.2011, 18:33
Но операторы циклов-то Вы знаете?

Нет я первую неделю только этим занимаюсь=)

Сначала все так говорят  smile Только потом это очень часто входит в привычку.

Не знаю в будущем увидим smile 

Ну вот, допустим, такой вариант (хотя он и несколько извращенный)

Офигеть мне еще расти и расти!!! smile

Добавлено через 1 минуту и 36 секунд
Цитата(bsa @ 7.1.2011,  12:16)
http://forum.vingrad.ru/index.php?show_type=forum&showtopic=269794&kw=faq-c++

Хм спасибо буду изучать после сессии)

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