• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problemy z metodami C++

Object Storage Arubacloud
0 głosów
328 wizyt
pytanie zadane 13 kwietnia 2016 w C i C++ przez TheFeniks Gaduła (4,690 p.)

Cześć ! 

Mam dwa problemy otóż:

► Po 1: https://zapodaj.net/cf07ed8a0a2fe.png.html

Nie działa licznik czyli:

Podaj 1 liczbe:

Podaj 2 liczbe:

....

Zamiast tego jest:

Podaj 1 liczbe:

Podaj 1 liczbe:

► Po 2:

Program cały czas chce aby wpisywać liczby.

A nie tylko 4 tak jak było na tym scrennie powyżej

W czym leży problem ?

Program jest rodzielony na 3 pliki dwa .cpp i jeden .h

.h :

class Addition //Dodawanie
{
 public:

   float input[30];
   float score;
   int counter;
   int board_story[25];

   float input_M(); //Wejscie

   void control(int);

   float calculate();
};

Metody .cpp :

#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <windows.h>
#include "list.h"
using namespace std;

HANDLE uchwyt = GetStdHandle(STD_OUTPUT_HANDLE);//Uchwyt kolory

float Addition::input_M()
{
    bool l_inCounter=true;
    bool l_input=true;

    while( l_inCounter )
    {
       l_inCounter=true;
       l_input=true;
       system("cls");
       SetConsoleTextAttribute(uchwyt,7);
       cout<<"|=====================|"<<endl; SetConsoleTextAttribute(uchwyt, 9);
       cout<<"       Dodawanie       "<<endl; SetConsoleTextAttribute(uchwyt,7);
       cout<<"    Ile liczb dodac:";
       cin>>counter;
       if(!(counter))
       {
          control(counter);
       }
       else
       {
          l_inCounter=false;
       }
    }
     SetConsoleTextAttribute(uchwyt,7);
     cout<<"|======================|"<<endl;
     for(int i=1; i<=counter; i++)
     {
        l_input=true;
         while( l_input )
         {
           SetConsoleTextAttribute(uchwyt,7);
           cout<<"  Podaj:"<<i<<" liczbe:";
           cin>>input[i];
           control(i);
         }
     }

}

void Addition::control(int i=0)
{
    bool l_inCounter=true;
    bool l_input=true;

    if(!(counter))
    {
      cout<<endl; SetConsoleTextAttribute(uchwyt, 12);
      cout<<" Blad! Nieprawidlowe wejscie!"<<endl;
      Sleep(1000);
      cin.clear();
      cin.ignore(1000,'\n');
    }
    else
    {
      l_inCounter=false;
    }

    if(!(input[i]))
    {
      cout<<endl; SetConsoleTextAttribute(uchwyt, 12);
      cout<<" Blad! Nieprawidlowe wejscie!"<<endl;
      Sleep(1000);
      cin.clear();
      cin.ignore(1000,'\n');
    }
    else
    {
      l_input=false;
    }
}

float Addition::calculate()
{

}

Z góry dzięki za pomoc ! :) 

2 odpowiedzi

+1 głos
odpowiedź 13 kwietnia 2016 przez Radfler VIP (101,030 p.)
wybrane 14 kwietnia 2016 przez TheFeniks
 
Najlepsza

Witaj! Wymienię Ci błędy, które zrobiłeś w kodzie:

1) Funkcje calculate i input_M nic nie zwracają => UB.

2) Linijka 50: argument domniemany nie powinien znaleźć się w tym miejscu. Powinien być w pliku nagłówkowym, w deklaracji funkcji.

3) Funkcja control jest według mnie... bez sensu. Co ona właściwie ma robić? Kontrolować wejście? Ona przecież sprawdza w if-ach czy wartości zmiennych są różne od zera:

!(counter) <=> counter != 0

Jeżeli chodzi tu o coś innego to sprecyzuj proszę.

4) Zamiast pisać wszędzie SetConsoleTextAttribute(uchwyt, 12) zrób sobie funkcję (powiedzmy) set_color i jej używaj. Masz tu moją implementację. Przykład:

set_color(Color::BLUE);
komentarz 13 kwietnia 2016 przez TheFeniks Gaduła (4,690 p.)
edycja 13 kwietnia 2016 przez TheFeniks

Funkcja control(); jest po to żeby sprawdzić czy zamiast liczby nie wpisano litery.

W opisie pytania masz dokładny opis problemu. :)

Zmieniłem: 

void Addition::control(int i=0)

na

void Addition::control()

I wyskakują błędy:

||=== Build: Debug in KalkulatorV2 (compiler: GNU GCC Compiler) ===|
methods.cpp||In member function 'float Addition::input_M()':|
methods.cpp|51|warning: no return statement in function returning non-void [-Wreturn-type]|
methods.cpp|53|error: prototype for 'void Addition::control()' does not match any in class 'Addition'|
list.h|15|error: candidate is: void Addition::control(int)|
methods.cpp||In member function 'float Addition::calculate()':|
methods.cpp|88|warning: no return statement in function returning non-void [-Wreturn-type]|
||=== Build failed: 2 error(s), 2 warning(s) (0 minute(s), 4 second(s)) ===|

 

komentarz 13 kwietnia 2016 przez Radfler VIP (101,030 p.)

Nie no, słowo int musi zostać (w końcu to argument). Przenieś po prostu =0 do pliku nagłówkowego.

komentarz 13 kwietnia 2016 przez TheFeniks Gaduła (4,690 p.)

main.cpp: http://wklej.org/id/2274130/

methods.cpp: http://wklej.org/id/2274127/

list.h : http://wklej.org/id/2274128/

Błędy:

methods.cpp||In member function 'float Addition::input_M()':|

methods.cpp|51|warning: no return statement in function returning non-void [-Wreturn-type]|

methods.cpp|53|error: default argument given for parameter 1 of 'void Addition::control(int)' [-fpermissive]|

ist.h|15|error: after previous specification in 'void Addition::control(int)' [-fpermissive]|

methods.cpp||In member function 'float Addition::calculate()':|

methods.cpp|88|warning: no return statement in function returning non-void [-Wreturn-type]|

||=== Build failed: 2 error(s), 2 warning(s) (0 minute(s), 2 second(s)) ===|

 

komentarz 14 kwietnia 2016 przez Radfler VIP (101,030 p.)
=0 z pliku .cpp usuń
1
komentarz 14 kwietnia 2016 przez TheFeniks Gaduła (4,690 p.)
edycja 14 kwietnia 2016 przez TheFeniks
Dobra problem rozwiązany!

Dzięki za pomoc !

 

Pozdrawiam ! :)
0 głosów
odpowiedź 13 kwietnia 2016 przez niezalogowany
Zmienne l_input i l_inCounter w metodach control i input_M to zmienne lokalne.

Podobne pytania

0 głosów
2 odpowiedzi 134 wizyt
0 głosów
2 odpowiedzi 221 wizyt
pytanie zadane 17 października 2015 w C i C++ przez timati Bywalec (2,060 p.)
0 głosów
2 odpowiedzi 2,187 wizyt
pytanie zadane 8 sierpnia 2015 w C i C++ przez niezalogowany

92,555 zapytań

141,402 odpowiedzi

319,553 komentarzy

61,939 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...