( C++ ) Por que não quer rodar e está dando problemas com a declaração de uma STRING?

2 respostas
stringprogramação
Bianca_Paixao
#include <iostream>
using namespace std;

int main ( ){
	string nome [40];
	float salario, porcentagem;
	int opcao, faltas;
	const float desconto = 0.10;
	
	
	cout << " MENU: " << endl;
	cout << " 1 - SALÁRIO COM AUMENTO "      << endl;
	cout << " 2 - CONTABILIZAÇÃO DE FALTAS " << endl;
	cin  >> opcao ;
	
	switch ( opcao ) {
	
		case ( '1' ):
			cout << " Informe o nome: " << endl;
			cin  >> nome;

			cout << " Informe o salário atual: " << endl;
			cin  >> salario;
			
			cout << " Informe a porcentagem de aumento: " << endl;
			cin  >> porcentagem;
			
			cout << " VALOR DO AUMENTO : " << ( salario * porcentagem ) / 100 << endl;
			cout << " SALÁRIO ACRESCIDO: " << ( salario * porcentagem ) / 100 + salario << endl;
			
			
		case ( '2' ):
			
			cout << " Informe o número de faltas: " << endl;
			cin  >> faltas;
			
			cout << " SALÁRIO ACRESCIDO COM FALTAS CONTABILIZADAS: " << (( salario * porcentagem ) / 100 + salario ) - ( faltas * desconto ) << endl;
		default:
			
			break;
	}
	
	return (0);
}

2 Respostas

drsmachado

Tem mesmo certeza que não precisa declarar nenhuma importação?

lvbarbosa

Declare a string como:

string nome;

String em C++ é reamlente uma String, e não um array de chars. Por isso, não precisa do [40]. Claro, por baixo dos panos é um array, mas a gente não precisa saber disso.

Em seguida, modifique os valores dos cases dentro do switch. Você está lendo um inteiro em cin >> opcao, mas está testando o case para chars. Um literal de char, como '1', ou 'a', é um inteiro, e vale um número da tabela ASCII. Como você está lendo um int, a linguagem está convertendo de char para int sozinha. Portanto, o switch fica:

switch (opcao) {
    case 1:
        ...
        break; // Não esqueça do break no final, senão os casos abaixo desse também serão executados, uma situação conhecida como "fallthrough"
    case 2:
        ...
        break;
    default:
        break;
}

1 é diferente de ‘1’. Quer fazer o teste?

int um = '1';
cout << um << endl;
Criado 8 de março de 2017
Ultima resposta 8 de mar. de 2017
Respostas 2
Participantes 3