Ajuda o que esta mal neste programa de c++

o que esta mal neste programa pede para inserir 9 numeros e para mostrar quantos numeros pares inseriu e quanto impares inseriu e tem que ser com vector eu insiro os 9 numeros mas so me mostra a soma de oito impares e pares ja dei mil e uma volta e nao consigo encontrar o erro agradecia muito a vossa ajuda .

#include
<iostream>
#include <vector>
using namespace std;
int main (){
int i=0;
int impares=0;
int pares=0;
int vector[9];
//for (int i=0;i<9){
cout << " insira 9 numeros " << endl;
cin >> vector;
while (i<8){

if(vector %2 != 0){ // verifica se o numero é impar
impares++;
}
else{ // caso não seja impar o que quer dizer que é par
pares++;
}
i++;
cin >> vector;
}
cout <<
"pares ->" << pares << endl;
cout <<
"impares ->" << impares << endl;
return 0;
}
 
Tinhas umas coisinhas mal, mas no geral andaste lá perto. Aproveita para ver o que está diferente e com olhos de ver. Este código foi baseado no teu. Está muito simples, sem verificar se o input está correcto, entre outras pequenas coisas. Mas para o que tu queres deve chegar bem. :)

Código:
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#a31515][SIZE=2][COLOR=#a31515]<iostream>[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#a31515][SIZE=2][COLOR=#a31515]<vector>[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]using [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]namespace[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#000000] std;[/COLOR][/SIZE]
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#000000] main () {[/COLOR][/SIZE]
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]   int[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] i=0;[/SIZE]
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]   int[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] impares=0;[/SIZE]
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]   int[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] pares=0;[/SIZE]
[SIZE=2]   vector<[/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]> vector(9);[/SIZE]
 
[SIZE=2]   cout << [/SIZE][SIZE=2][COLOR=#a31515][SIZE=2][COLOR=#a31515]"Insira 9 numeros."[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] << endl;[/SIZE]
 
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]   for[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] (i=0; i<9; i++) [/SIZE]
[SIZE=2]       cin >> vector[i];[/SIZE]
 
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]   for[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2](i=0; i<9; i++)[/SIZE]
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]       if[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2](vector[i] %2 != 0) [/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// verifica se o numero impar[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]          impares++;[/SIZE]
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]       else[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] pares++; [/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// caso no seja impar o que quer dizer que par[/COLOR][/SIZE]
[/COLOR][/SIZE]
[SIZE=2]   cout << [/SIZE][SIZE=2][COLOR=#a31515][SIZE=2][COLOR=#a31515]"Pares ->"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] << pares << endl; [/SIZE]
[SIZE=2]   cout << [/SIZE][SIZE=2][COLOR=#a31515][SIZE=2][COLOR=#a31515]"Impares ->"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] << impares << endl;[/SIZE]
 
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]   return[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] 0;[/SIZE]
[SIZE=2]}[/SIZE]
 
Só um aparte: E se o nº que inserires for o zero? Pela lógica do teu programa, testas se é ímpar, e se não for, é porque é par.

Ou seja, estás a assumir zero como par.

Convém aqui dizer que o zero é considerado par por convenção (e não por ser um par verdadeiro), porque simplesmente dá jeito que seja assim: Fica entre dois ímpares (1 e -1), a soma de 2 nºs pares é sempre um nº par (2+0=2, 8+0=8), e dividindo por 2 o resto da divisão é zero (mais uma definição de nº par: 0/2=0, resto 0).
Também é chamado muitas vezes de neutro.

Presumo que este programa seja para um trabalho escolar, e ficava todo pintarolas se expandisses um pouco mais o programa para considerar a hipótese de um (ou mais) dos nºs inseridos ser zero. No fim mostrarias o nº de valores pares, de ímpares e de zeros.

Basta declarar mais um int, acrescentar mais um if/else, e mais uma linha cout para mostrar o resultado no fim.

Código:
#include<iostream>
#include<vector>
using namespace std;

int main () 
{
   int i=0;
   int impares=0;
   int pares=0;
   int zeros=0; 
   vector<int> vector(9);
 
   cout << "Insira 9 numeros." << endl;
 
   for (i=0; i<9; i++) 
       cin >> vector[i];

   for(i=0; i<9; i++)

       if(vector[i] = 0) // verifica se o numero é zero
          zeros++;
       else              // Ok, não é zero, vamos ver se é par ou ímpar
          {              // Não tenho a certeza se estas chavetas são necessárias, o meu C está um pouco enferrujado                   
          if(vector[i] %2 != 0) // verifica se o numero é impar
             impares++;
          else pares++;  // se não é impar nem zero, é par
          }              // Se a chaveta anterior não for necessária, esta também não é

   cout << "Pares ->" << pares << endl; 
   cout << "Impares ->" << impares << endl;
   cout << "Zeros ->" << zeros << endl;
 
   return 0;
}

Isto foi feito a olhómetro, portanto não está livre de erros. Como o blackburn69 disse, vê com olhos de ver e tira as tuas próprias conclusões.
 
Sim, tens razão. Nem pensei nesse caso (nem tinha que o fazer). :)
Não sei é se a intenção não é mesmo contar os 0's como pares, mas isso saberá o criador da thread. Ficam as 2 alternativas. :)
E sim, aquelas chavetas não são necessárias. :) O if-"then"-else é considerado um bloco e como é o único argumento do else, então não é necessário. (Mas também não faz mal lá estarem.) Apenas fica código menos confuso (na minha opinião) se não houver chavetas desncessárias.
Mas como já tinha dito, limitei-me a pegar no código dele e a fazer de debugger. lol Reescrevi pouco mais do que o necessário para fazer o programa funcionar de acordo com o raciocínio que já lá estava.
 
Back
Topo