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

Code Blocks i Visual Studio

Cloud VPS
0 głosów
4,150 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,495 wizyt
0 głosów
1 odpowiedź 1,586 wizyt
0 głosów
0 odpowiedzi 716 wizyt

93,469 zapytań

142,404 odpowiedzi

322,716 komentarzy

62,852 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

Kursy INF.02 i INF.03
...