Znaki w strumieniu wejścia.

0

Witam mam zrobić prosty program obliczający średnią aż do podania jakiegoś znaku. Niestety po podaniu znaku program zapętla się w nieskończoność.
Kod:

#include<vector>
#include<iostream>
#include<conio.h>
using namespace std;

void main()
{
	vector <int> tab;
	bool sprawdz=0;
	int x;
	cout<<"Program oblicza srednia dowolnej ilosci liczb."<<endl;
	while(sprawdz=0)
	{
		cout<<"Podaj pierwsza liczbe: ";
		cin>>x;
		sprawdz=cin.good();
		if(sprawdz=0)cout<<"Liczbe nie litere."<<endl;
		else tab.push_back(x);
	}

	while(sprawdz=1)
	{
		cout<<"Podaj kolejna liczbe lub inny znak aby obliczyc srednia: ";
		cin>>x;
		sprawdz=cin.good();
		if(sprawdz=1)tab.push_back(x);
	}
	int suma=0;
	for(int i=0;i<tab.size();i++)
	{
		suma+=tab[i];
	}
	cout<<"Srednia wynosi "<<suma/tab.size();
	getch();
} 

Co robię źle?

0
while(sprawdz=0)

zamien na

while(sprawdz==0)

Twoja pierwsza petla jest ciagle 0(false), natomiast druga jest 1(true), stad najprawdopodobniej zapetlenie. Zmiana operatora przypisania na porownanie powinna pomoc.

0

bool ma dwa stany
true lub false
Nie przypisuj do niego liczb, bo masz niejawne rzutowanie.
zamiast pisać
if (zmienna == false) to napisz
if (!zmienna)
zamiast
if (zmienna == true) to napisz
if (zmienna)

0

Praktycznie to wszystko.

Źle sprawdzasz warunki - nie = tylko ==. Zmienna sprawdz jest zupełnie niepotrzebna.
Wszystko można ująć w jednej pętli while i z każdym przebiegiem sprawdzasz, co za znak/liczba został podany i jeśli jest to znak, który ma kończyć program to wtedy wyświetlasz wynik.
Najprostszy przykład:

while(true){
    //podajesz liczby, sumujesz, obliczasz, itp.
    std::cout<<"Czy kontynuowac?\n";
    char odp;
    cin>>odp;
    if(odp != 'T')
        break;
}
cout<<"Wynik: \n";
//tu wypisuejsz wynik

Nie używaj żadnych getch() itp. Radzę zainstalować jakieś lepsze IDE (strzelam, że masz Dev'a) - Code::Blocks np.

0

Jak chcesz obliczyć wartość średnią to po co przechowujesz wprowadzone zmienne? Przecież to kompletne marnotrawstwo pamięci. Program powinien zliczać sumę i ilość liczb, bo tylko to potrzebne jest do średniej. Czyli dwa inty, w przypadku tego programu.
Rozumiem, że tutaj "do konkretnego znaku" znaczy do napotkania końca pliku (CTRL+D lub CTRL+Z)?

0

Wielkie dzięki. Ciągle zapominam o drugim =.

0
#include <iostream>
#include <cstdio>
using namespace std;
 
int main()
  {
   int sum=0,count=0;
   cout<<"Program oblicza srednia dowolnej ilosci liczb."<<endl;
   while(true)
     {
      cout<<"Podaj liczbe nr "<<(count+1)<<": ";
      int x;
      if(cin>>x)
        {
         sum+=x;
         ++count;
        }
      else
        {
         cin.clear();
         if(cin.peek()!=EOF) cout<<"Liczbe nie litere."<<endl;
         else break;
        }
      while(cin.get()!='\n') {}
     }
   if(count) cout<<"Srednia wynosi "<<(double)sum/count<<endl;
   else cout<<"Nie podano liczb"<<endl;
   cin.sync(); cin.get();
   return 0;
  }

1 użytkowników online, w tym zalogowanych: 0, gości: 1