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

Code Blocks i Visual Studio

Object Storage Arubacloud
0 głosów
3,791 wizyt
pytanie zadane 5 listopada 2016 w C i C++ przez szerwi Użytkownik (620 p.)

Mam pytanie. Aplikacja, która w Code Blocks działa mi bez problemowo w Microsoft Visual Studio wywala różne głupie błędy.

#include <iostream>
#include <stdio.h>

using namespace std;

string dodaj,odejmij,pomnoz,podziel,c;
float a,b,wynik,koniec;

int main()
{
    cout << "Podaj 1 liczbe: ";
    cin >> a;

    cout << "Podaj 2 liczbe: ";
    cin >> b;

    cout << "Wybierz co chcesz zrobic z liczbami (dodaj, odejmij, pomnoz, podziel): ";
    cin >> c;

    if(c=="dodaj")
    {
        wynik=a+b;
        cout << "Suma to: " << wynik;
    }

    if(c=="odejmij")
    {
        wynik=a-b;
        cout << "Roznica to: " << wynik;
    }

     if(c=="pomnoz")
    {
        wynik=a*b;
        cout << "Mnozenie to: " << wynik;
    }

     if(c=="podziel")
    {
        wynik=a/b;
        cout << "Dzielenie to: " << wynik;
    }
    if((c!="dodaj")&&(c!="odejmij")&&(c!="pomnoz")&&(c!="podziel"))
    {
        cout << "Zle dzialanie!";
    }
    getchar();getchar();
}

W codeblock to działa, a w Visual wywala coś takiego:


Błąd (aktywny)        żaden operator ">>" nie pasuje do tych argumentów operacji    ConsoleApplication5    c:\Users\***\Documents\Visual Studio 2015\Projects\ConsoleApplication5\ConsoleApplication5\main.cpp    18    
 

Dodatkowo Visual Studio ciągle się zawiesza. Ktoś wie czego to może być przyczyna? 

2 odpowiedzi

+1 głos
odpowiedź 5 listopada 2016 przez ElMago Początkujący (280 p.)
edycja 5 listopada 2016 przez ElMago

W Visual Studio do wyświetlania obiektów klasy string musisz dodać bibliotekę <string> i wszystko będzie działać.
Poza tym trochę poprawiłem Twój kod. Zmienna koniec jest w ogóle nieużywana, a zmienna wynik jest zbędna. Należy też unikać przestrzeni nazw using namespace std. Poprawiłem też instrukcje warunkowe. 

 

#include <iostream>
#include <stdio.h>
#include <string>

int main()
{
	using std::cin;
	using std::cout;
    std::string dodaj, odejmij, pomnoz, podziel, c; 
    float a, b;

	cout << "Podaj 1 liczbe: ";
	cin >> a;

	cout << "Podaj 2 liczbe: ";
	cin >> b;

	cout << "Wybierz co chcesz zrobic z liczbami (dodaj, odejmij, pomnoz, podziel): ";
	cin >> c;

	if (c == "dodaj")
	{
		cout << "Suma to: " << a + b;
	}

	else if (c == "odejmij")
	{
		cout << "Roznica to: " << a - b;
	}

	else if (c == "pomnoz")
	{
		cout << "Mnozenie to: " << a*b;
	}

	else if (c == "podziel")
	{
		cout << "Dzielenie to: " << a / b;
	}
	else
	{
		cout << "Zle dzialanie!";
	}
	getchar(); getchar();
}

 

komentarz 5 listopada 2016 przez Cinnamon Użytkownik (640 p.)
Przestrzeń nazw using namespace std; nie jest wymagana, ale w niczym nie wadzi, skraca kod i poprawia jego czytelność.

Czasem po usunięciu #include "stdafx.h" program będzie wywalać błędy, u mnie przykładowo to tak działa.
1
komentarz 5 listopada 2016 przez unknown Nałogowiec (39,560 p.)

Przestrzeń nazw using namespace std; nie jest wymagana, ale w niczym nie wadzi, skraca kod i poprawia jego czytelność

Chyba nie masz zbyt dużego doświadczenia w C++. Wadzi i to wiele(i czytelność też zmniejsza). Już wiele ludzi miało WTF, bo włączali wszystko do globalnej przestrzeni nazw(nawet pare osób na tym forum) i pojawiały się konflikty nazw. W kodzie produkcyjnym wogóle nie używa się dyrektywy using.

0 głosów
odpowiedź 5 listopada 2016 przez szerwi Użytkownik (620 p.)
edycja 5 listopada 2016 przez szerwi

Dzięki wielkie :) A może wiesz czemu nie działa jeszcze to:

// ConsoleApplication6.cpp: Określa punkt wejścia dla aplikacji konsoli.
//

#include "stdafx.h"
#include <iostream>
#include <cmath>
#include <windows.h>
#include <cstdlib>
#include <stdio.h>
#include <string>

using namespace std;

float suma(float wynik)
{
	float a, b;
	cout << "Podaj 1 liczbe: ";
	cin >> a;
	cout << "Podaj 2 liczbe: ";
	cin >> b;

	wynik = a + b;

	return wynik;
}

float roznica(float wynik)
{
	float a, b;
	cout << "Podaj 1 liczbe: ";
	cin >> a;
	cout << "Podaj 2 liczbe: ";
	cin >> b;

	wynik = a - b;

	return wynik;
}

float iloczyn(float wynik)
{
	float a, b;
	cout << "Podaj 1 liczbe: ";
	cin >> a;
	cout << "Podaj 2 liczbe: ";
	cin >> b;

	wynik = a*b;

	return wynik;
}

float iloraz(float wynik)
{
	float a, b;
	cout << "Podaj 1 liczbe: ";
	cin >> a;
	cout << "Podaj 2 liczbe: ";
	cin >> b;

	wynik = a / b;

	return wynik;
}

float potegi(float wynik)
{
	float liczba;
	int potega;
	cout << "Podaj liczbe: ";
	cin >> liczba;
	cout << "Podaj wykladnik: ";
	cin >> potega;

	wynik = pow(liczba, potega);

	return wynik;
}

float pierwiastki(float wynik)
{
	float liczba;
	int pierwiastek;
	cout << "Podaj liczbe: ";
	cin >> liczba;
	cout << "Podaj stopien pierwiastka (x.0): ";
	cin >> pierwiastek;

	wynik = pow(liczba, (1 / pierwiastek));

	return wynik;
}

float prostokat(float wynik)
{
	float a, b;
	char wybor;

	cout << "Podaj 1 bok: ";
	cin >> a;
	cout << "Podaj 2 bok: ";
	cin >> b;

	cout << "1. Obwod" << endl;
	cout << "2. Pole" << endl;
	cin >> wybor;

	switch (wybor)
	{
	case '1': cout << "Obwod wynosi: " << (2 * a) + (2 * b);
	case '2': cout << "Pole wynosi: " << a*b;
	}
}

float trojkat(float wynik)
{
	float a, b, c, h;
	char wybor;

	cout << "1. Obwod" << endl;
	cout << "2. Pole" << endl;
	cin >> wybor;

	switch (wybor)
	{
	case '1':
	{
		cout << "Podaj 1 bok: ";
		cin >> a;
		cout << "Podaj 2 bok: ";
		cin >> b;
		cout << "Podaj 3 bok: ";
		cin >> c;

		system("cls");

		cout << "Obwod wynosi: " << a + b + c;
		break;
	}
	case '2':
	{
		cout << "Podaj podstawe :";
		cin >> a;
		cout << "Podaj wysokosc :";
		cin >> h;

		system("cls");

		cout << "Pole wynosi: " << (a*h) / 2;
		break;
	}
	}
}

float rownoleglobok(float wynik)
{
	float a, b, h;
	char wybor;

	cout << "1. Obwod" << endl;
	cout << "2. Pole" << endl;
	cin >> wybor;

	switch (wybor)
	{
	case '1':
	{
		cout << "Podaj 1 bok: ";
		cin >> a;
		cout << "Podaj 2 bok: ";
		cin >> b;

		cout << "Obwod wynosi: " << (2 * a) + (2 * b);

		break;
	}
	case '2':
	{
		cout << "Podaj podstawe :";
		cin >> a;
		cout << "Podaj wysokosc :";
		cin >> h;

		cout << "Pole wynosi: " << a*h;
		break;
	}
	}
}

float trapez(float wynik)
{
	float a, b, c, d, h;
	char wybor;

	cout << "1. Obwod" << endl;
	cout << "2. Pole" << endl;
	cin >> wybor;

	switch (wybor)
	{
	case '1':
	{
		cout << "Podaj 1 bok: ";
		cin >> a;
		cout << "Podaj 2 bok: ";
		cin >> b;
		cout << "Podaj 3 bok: ";
		cin >> c;
		cout << "Podaj 4 bok: ";
		cin >> d;

		cout << "Obwod wynosi: " << a + b + c + d;

		break;
	}
	case '2':
	{
		cout << "Podaj 1 podstawe :";
		cin >> a;
		cout << "Podaj 2 podstawe :";
		cin >> b;
		cout << "Podaj wysokosc :";
		cin >> h;

		cout << "Pole wynosi: " << (a + b)*h / 2;
		break;
	}
	}
}

float kolo(float wynik)
{
	float r;
	char wybor;

	cout << "Podaj promien kola: ";
	cin >> r;

	cout << endl << "1. Obwod" << endl;
	cout << "2. Pole" << endl;
	cin >> wybor;

	switch (wybor)
	{
	case '1':
	{
		cout << "Wyliczyc Pi?: " << endl;
		cout << "1. TAK" << endl;
		cout << "2. NIE" << endl;
		cin >> wybor;
		switch (wybor)
		{
		case '1': cout << "Obwod wynosi: " << 2 * r * 3, 14;         break;
		case '2': cout << "Obwod wynosi: " << 2 * r << " Pi";     break;
		}
	} break;
	case '2':
	{
		cout << "Wyliczyc Pi?: " << endl;
		cout << "1. TAK" << endl;
		cout << "2. NIE" << endl;
		cin >> wybor;

		switch (wybor)
		{
		case '1': cout << "Pole wynosi: " << pow(r, 2) * 3, 14;         break;
		case '2': cout << "Pole wynosi: " << pow(r, 2) << " Pi";     break;
		} break;
	}
	}
}


int main()
{
	for (;;)
	{


		int wynik;
		char wybor;

		cout << "KALKULATOR WERSJA v1.0" << endl;
		cout << endl << "MENU GLOWNE: " << endl;
		cout << "1. Dzialania" << endl;
		cout << "2. Wzory" << endl;
		cout << "3. Koniec programu" << endl;
		cin >> wybor;

		switch (wybor)
		{
		case '1':
		{
			system("cls");
			cout << "Dzialania:" << endl;
			cout << "1. Dodawanie" << endl;
			cout << "2. Odejmowanie" << endl;
			cout << "3. Mnozenie" << endl;
			cout << "4. Dzielenie" << endl;
			cout << "5. Potegi" << endl;
			cout << "6. Pierwiastki" << endl;
			cin >> wybor;

			system("cls");

			switch (wybor)
			{
			case '1': cout << "Suma wynosi: " << suma(wynik) << endl;               break;
			case '2': cout << "Roznica wynosi: " << roznica(wynik) << endl;         break;
			case '3': cout << "Iloczyn wynosi: " << iloczyn(wynik) << endl;         break;
			case '4': cout << "Iloraz wynosi: " << iloraz(wynik) << endl;           break;
			case '5': cout << "Wynik wynosi: " << potegi(wynik) << endl;             break;
			case '6': cout << "Wynik wynosi: " << pierwiastki(wynik) << endl;       break;

				system("cls");
				exit(0);
			}   break;
		}
		case '2':
		{
			system("cls");
			cout << "Wzory:" << endl;
			cout << "1. Prostokat" << endl;
			cout << "2. Trojkat" << endl;
			cout << "3. Rownoleglobok" << endl;
			cout << "4. Trapez" << endl;
			cout << "5. Kolo" << endl;
			cout << "6. Graniastoslup" << endl;
			cout << "7. Ostroslup" << endl;
			cout << "8. Walec" << endl;
			cout << "9. Stozek" << endl;
			cout << "10. Kula" << endl;
			cin >> wybor;

			system("cls");

			switch (wybor)
			{
			case '1': prostokat(wynik);                 break;
			case '2': trojkat(wynik);                   break;
			case '3': rownoleglobok(wynik);             break;
			case '4': trapez(wynik);                    break;
			case '5': kolo(wynik);                      break;
			}

		}
		case '3':
		{
			exit(0);
		}
		}
		getchar(); getchar();
		system("cls");
	}
	return 0;
}

 

Visual studio wywala błędy:


Błąd    C4716    "trapez": musi zwracać wartość    ConsoleApplication6  
 

do każdego podprogramu i


Błąd    C4700    użycie niezainicjowanej zmiennej lokalnej "wynik"    ConsoleApplication6  //linijka 308 i w dół
 

 

 I wiesz jeszcze jak zwiększyć szybkość działania Visual Studio? Przy najmniejszej czynności (np. tworzenie nowego projektu) program się wiesza na kilka sekund

komentarz 5 listopada 2016 przez unknown Nałogowiec (39,560 p.)
Funkcje, których typ zwracanej wartości jest różny od void powinny cokolwiek zwracać. Widocznie VS tego pilnuje i dobrze.

Co do szybkości działania to jaki masz komputer/laptop. Mi na laptopie z 4GB RAMU i 2-rdzeniowym procesorem 1.7ghz VS chodzi bardzo płynnie i nie narzekam.
komentarz 5 listopada 2016 przez szerwi Użytkownik (620 p.)
Hmmm, czyli couta który podaje wynik muszę zrobić w funkcji main? Nie da się w funkcji np void trojkat?

 

Mam komputer stacjonarny, 8GB ramu i procek też dobry. Może przez wolny dysk HDD? :)
komentarz 5 listopada 2016 przez unknown Nałogowiec (39,560 p.)
Jeśli typ zwracanej wartości będzie void to jak najbardziej wynik możesz wypisać w funkcji.

A jaki masz dysk? Może masz uruchomione inne procesy, które obciążają komputer.
komentarz 5 listopada 2016 przez szerwi Użytkownik (620 p.)

Czyli powinno być coś takiego?


float trojkat(float wynik)
{
    float a, b, c, h;
    char wybor;
 
    cout << "1. Obwod" << endl;
    cout << "2. Pole" << endl;
    cin >> wybor;
 
    switch (wybor)
    {
    case '1':
    {
        cout << "Podaj 1 bok: ";
        cin >> a;
        cout << "Podaj 2 bok: ";
        cin >> b;
        cout << "Podaj 3 bok: ";
        cin >> c;
 
        system("cls");
 
        cout << "Obwod wynosi: " << a + b + c;
        break;
    }
    case '2':
    {
        cout << "Podaj podstawe :";
        cin >> a;
        cout << "Podaj wysokosc :";
        cin >> h;
 
        system("cls");
 
        cout << "Pole wynosi: " << (a*h) / 2;
        break;
    }
    }
return 0;
}

 

komentarz 5 listopada 2016 przez unknown Nałogowiec (39,560 p.)
Jeśli funkcja ma zwracać 0 to zmień po prostu float trojkat(...) na void trojkat(...) i usuń return i tyle.
komentarz 5 listopada 2016 przez szerwi Użytkownik (620 p.)
edycja 5 listopada 2016 przez szerwi

Jeszcze pozostaje błąd:


Błąd    C4700    użycie niezainicjowanej zmiennej lokalnej "wynik"    ConsoleApplication2


int main()
{
	for (;;)
	{


		int wynik;
		char wybor;

		cout << "KALKULATOR WERSJA v1.0" << endl;
		cout << endl << "MENU GLOWNE: " << endl;
		cout << "1. Dzialania" << endl;
		cout << "2. Wzory" << endl;
		cout << "3. Koniec programu" << endl;
		cin >> wybor;

		switch (wybor)
		{
		case '1':
		{
			system("cls");
			cout << "Dzialania:" << endl;
			cout << "1. Dodawanie" << endl;
			cout << "2. Odejmowanie" << endl;
			cout << "3. Mnozenie" << endl;
			cout << "4. Dzielenie" << endl;
			cout << "5. Potegi" << endl;
			cout << "6. Pierwiastki" << endl;
			cin >> wybor;

			system("cls");

			switch (wybor)
			{
			case '1': cout << "Suma wynosi: " << suma(wynik);						break;
			case '2': cout << "Roznica wynosi: " << roznica(wynik) << endl;         break;
			case '3': cout << "Iloczyn wynosi: " << iloczyn(wynik) << endl;         break;
			case '4': cout << "Iloraz wynosi: " << iloraz(wynik) << endl;           break;
			case '5': cout << "Wynik wynosi: " << potegi(wynik) << endl;            break;
			case '6': cout << "Wynik wynosi: " << pierwiastki(wynik) << endl;       break;

				system("cls");
				exit(0);
			}   break;
		}
		case '2':
		{
			system("cls");
			cout << "Wzory:" << endl;
			cout << "1. Prostokat" << endl;
			cout << "2. Trojkat" << endl;
			cout << "3. Rownoleglobok" << endl;
			cout << "4. Trapez" << endl;
			cout << "5. Kolo" << endl;
			cout << "6. Graniastoslup" << endl;
			cout << "7. Ostroslup" << endl;
			cout << "8. Walec" << endl;
			cout << "9. Stozek" << endl;
			cout << "10. Kula" << endl;
			cin >> wybor;

			system("cls");

			switch (wybor)
			{
			case '1': prostokat(wynik);                 break;
			case '2': trojkat(wynik);                   break;
			case '3': rownoleglobok(wynik);             break;
			case '4': trapez(wynik);                    break;
			case '5': kolo(wynik);                      break;
			}

		}
		case '3':
		{
			exit(0);
		}
		}
		getchar(); getchar();
		system("cls");
	}
	return 0;
}


Mimo że w mainie jest float wynik. Jak to naprawić? :)

 

Mimo że w mainie jest float wynik. Jak to naprawić? :)

 

 

EDIT: Udało się naprawić :) Wystarczy w funkcji main dopisać wartość dla floata wynik :)

Podobne pytania

0 głosów
2 odpowiedzi 1,309 wizyt
0 głosów
1 odpowiedź 1,036 wizyt
0 głosów
0 odpowiedzi 492 wizyt

92,536 zapytań

141,377 odpowiedzi

319,456 komentarzy

61,922 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!

...