Ir para conteúdo
Fórum Script Brasil
  • 0

ajuda nesse código em C.


stereobaby

Pergunta

Não consigo fazer o código mostrar quando a senha está correte, ou seja, quando senha e nome são diferentes.

Faça um programa que leia um nome de usuário e a sua senha e não aceite a senha
igual ao nome do usuário, mostrando uma mensagem de erro e voltando a pedir as
informações.

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

 main()
{
    char senha[10];
    char  nome[10];
    
    
    do {

    printf ("\n digite o seu primeiro nome: ");
    scanf ("%s", &nome);
    printf ("\n digite sua senha: ");
    scanf ("%s", &senha);
    
    }while (nome == senha);
        printf ("ERRO. Digite novamente.");
}


e esse aqui não consegue fazer os cálculos corretos que a questão pede
8) Um posto está vendendo combustíveis com a seguinte tabela de descontos:
a) Álcool:
b) até 20 litros, desconto de 3% por litro
c) acima de 20 litros, desconto de 5% por litro
d) Gasolina:
e) até 20 litros, desconto de 4% por litro
f) acima de 20 litros, desconto de 6% por litro
Escreva um algoritmo que leia o número de litros vendidos, o tipo de combustível
(codificado da seguinte forma: A-álcool, G-gasolina), calcule e imprima o valor a ser pago
pelo cliente sabendo-se que o preço do litro da gasolina é R$ 2,50 o preço do litro do
álcool é R$ 1,90.
 

#include <stdio.h>
#include <stdlib.h>

main ()
{
    float litros, alcool, gasolina, valorfinala, valorfinalg, descalcool, descgaso;
    char comb;
    //Entrada de dados
    printf ("\n Alcool ou Gasolina? Digite A - Alcool ou G - Gasolina:  ");
    scanf ("%c", &comb);
    printf ("\n Quantos litros você vai querer?  ");
    scanf ("%f", &litros);
    
    //Condição para desconto Alcool e valor final
    if ((comb == 'A')|| (comb == 'a')) {
        alcool = litros * 1,90;
        if ( litros <= 20){
    descalcool = (alcool * 0,03);
    valorfinala = (alcool - descalcool);
    }else{
    descalcool = (alcool * 0,05);
    valorfinala = (alcool - descalcool);
    printf ("\n Total a pagar com desconto %.3f: ", valorfinala);
    //scanf ("%f", &valorfinala);
}
}
    
    //Condição para desconto Gasolina e valor final
    if ((comb == 'G')|| (comb == 'g')) {
        gasolina = litros * 2,50;
            if ( litros <= 20){
    descgaso = (gasolina * 0,04);
    valorfinalg = (gasolina - descgaso);
    }else{
    descgaso = (gasolina * 0,06);
    valorfinalg = (gasolina - descgaso);
    printf ("\n Total a pagar com desconto%.3f : ",valorfinalg );
    scanf ("%f", &valorfinalg);
}
}
    
}

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0
//*********PRIMEIRO PROBLEMA**********//
#include <stdio.h>
#include <stdlib.h>
#include<string.h>

///COLOQUE RETORNO NO SEU MAIN///

/* Consideracoes:
	1- um vetor de tamanho N, como "char senha[10]" é na verdade um ponteiro para um lucar na heap com 10 posisoes vezes sizeof(char);
	2- A funcao strcmp() retorna 3 valores possiveis, 
		-1 caso a palavra 1 seja menor que a palavra 2
		0 caso as palavras sejam iguais
		1 caso a palavra 2 seja maior que a palavra 1
*/

int MyStrcmp( char *nome, char *senha )
{
	register int i;
	
	//vamos usar o strlen() para pegar o tamanho da string
	int tamanhoNome = strlen(nome);
	int tamanhoSenha = strlen(senha);
	
	if( tamanhoSenha != tamanhoNome )//palavras de tamanho diferente são diferentes
		return 0;
	
	for(i = 0; nome[i] != '\0'; i++)//caminha ate o final do nome, já que os dois tem o msmo tamanho
		if( nome[i] != senha[i] )//se a letra 'i' do nome for diferente da letra 'i' da senha
			return 0;
			
	return 1;//se nunca entra no if de cima, que dize q as palavras são iguais
}

int main()
{
	//para fazer a comparacao de string, podemos criar uma funcao que faça isso, ou apenas utilizar o strcmp() da string.h, aki vamos fazer dos dois jeitos
	
    char senha[10];
    char  nome[10];
    
    do 
	{
		printf ("\n digite o seu primeiro nome: ");
		scanf ("%s", &nome);
		printf ("\n digite sua senha: ");
		scanf ("%s", &senha);
		
		if( MyStrcmp( nome, senha ) == 1 ) //se a minha funcao retornar um (quer dizer que são iguais), da o erro
			printf ("ERRO. Digite novamente.");//O erro tem q ser colocado dentro
    }while ( !strcmp( nome, senha ) ); //A partir da consideração 1, essa comparacao esta comparando duas posicoes na memoria.
		
	return (0);
}

 

//**********PROBLEMA 2*********//
#include <stdio.h>
#include <stdlib.h>


#define CLEAN_BUFF do{ int c; while((c = getchar()) != '\n' && c != EOF);}while(0)
	
/*Considerações
 * 1- scanf() com %c, pega apenas a letra que você digitou e deixa no buffer o \n(enter), nesse caso não ocorre erro, porem pegue o costume de usar um getchar() ou 
	  alguma estrutura como o define acima para limpar seu buffer.
	  
	2- Voce ta colocando virgula onde deveria ser ponto, por isso as contas dao errado, "50 * 2,5 = 100" e "50 * 2.5 = 125", e os printf estao no lugar errado
 */
int main ()
{
    float litros, alcool, gasolina, valorfinala, valorfinalg, descalcool, descgaso;
    char comb;
    //Entrada de dados
    printf ("\n Alcool ou Gasolina? Digite A - Alcool ou G - Gasolina:  ");
    scanf ("%c", &comb);
	CLEAN_BUFF;
    printf ("\n Quantos litros você vai querer?  ");
    scanf ("%f", &litros);
   
    //Condição para desconto Alcool e valor final
    if ((comb == 'A')|| (comb == 'a')) 
	{
		alcool = litros * 1.90;
		if ( litros <= 20)
		{
			descalcool = (alcool * 0.03);
			valorfinala = (alcool - descalcool);
		}else
		{
			descalcool = (alcool * 0.05);
			valorfinala = (alcool - descalcool);
		}

		printf ("\n Total a pagar com desconto %.3f: ", valorfinala);
	}
    
    //Condição para desconto Gasolina e valor final
    if ((comb == 'G')|| (comb == 'g')) 
	{
		gasolina = litros * 2.50;
		if ( litros <= 20)
		{
			descgaso = (gasolina * 0.04);
			valorfinalg = (gasolina - descgaso);
		}else
		{
			descgaso = (gasolina * 0.06);
			printf("%.3f\n", descgaso);
			valorfinalg = (gasolina - descgaso);
			// scanf ("%f", &valorfinalg); <<<<--- não intendi o porque disso
		}
		
		printf ("\n Total a pagar com desconto%.3f : ", valorfinalg);
	}

	return (0);
}

 

Link para o comentário
Compartilhar em outros sites

  • 0

Quando for ler strings e ponteiros não ponha & adiante no scanf.

A linha  scanf ("%s", &nome), deveria ficar tal como scanf ("%s", nome), sem o & adiante de nome.
Explicação:
Para ler um string em C, precisamos indicar para o scanf o inicio desde onde vamos começar a escrever, é dizer precisamos informar para o scanf se queremos escrever desde a posição zero do string ou outra posição, porque não estamos limitados a escrever desde a primeira posição. Imagine que tenho um array char frase[100], e quero que o scanf me escreva desde frase[10] adiante. Pois é... com scanf é possível, vamos ver como:

Se tenho:
char frase[100]

Para ler desde o principio, ou seja frase[0] uso o scanf tal como:
scanf("%s", frase);

A efeitos 'frase' é a mesma coisa que &frase[0], um ponteiro ao primeiro elemento do array frase.
O &frase[0] retorna a direção do primeiro elemento.
E o frase é um ponteiro que guarda a direção do primeiro elemento.

Para se fazer uma ideia, podemos usar 2 formas diferentes para a mesma coisa:
scanf("%s", frase);
E
scanf("%s", &frase[0]);

São as duas formas diferentes pela qual obtemos o mesmo resultado. Certamente você vai se perguntar a essas alturas...
Por que tem 2 formas de se fazer a mesma coisa? Simples! Que aconteceria se eu quiser escrever desde frase[10] em vez de frase[0]? A forma correta seria scanf("%s", &frase[10]). Fácil não?

Então lembra que 'frase' é como se fosse um "atalho" para não ter que escrever &frase[0] já que esse ultimo é mais difícil de escrever, na realidade frase é um ponteiro, por esse motivo não devemos por & adiante de strings e ponteiros, porque ponteiros e strings já são direções de memória e não precisamos por & adiante. Porem se quero indicar uma posição em concreto tal como &frase[0] ou &frase[10], então sim devo por & adiante.

Não se preocupe pelo tema se ainda não chegou em ponteiros, somente lembre não por & adiante do indicador em scanf, a menos que queira especificar uma posição como vimos. Lembre que frase é exatamente a mesma coisa que &frase[0], aponta para o primeiro elemento do nosso array, e que isso é o que importa para scanf, saber desde que elemento tem que começar a escrever.

Link para o comentário
Compartilhar em outros sites

  • 0

Alguém poderia me ajudar com código em C?

1. Escreva uma função, que insira dados de N funcionários da Universidade Cabo Verde e envia-los para ficheiro como o nome 
funcionarios.txt (o programa deverá informar quantos funcionários deseja inserir no sistema?);

2. Escreva uma função, que imprima registos de todos os funcionários que se encontra no ficheiro com o nome funcionarios.txt, inserido 
anteriormente?

3. Escreva uma função, que imprima os funcionários por categoria.

4. Escreva uma função, que permite calcular quanto gasta a universidade com os funcionários por categoria?

5. Temos três tipos de categorias dos funcionários [Docente, Diretor e Técnico], sabendo que o funcionário que é Docente recebe 2500$ 
por cada hora, um Diretor recebe 3500$ por hora, e um Técnico recebe 1500$ por hora. Escreva uma função, que mostra o salário de 
um determinado funcionário dependendo do seu salário liquido por hora, sabendo que INPS é de 12%, IUR é de 20% e sindicato é de 
1%; 

6. Escreva uma função, que ordena os funcionários na ordem crescentes e envia-los para o ficheiro com o nome 
ordenar_funcionarios.txt;

7. Escreva uma função, que imprima todos os funcionários com salario maior que 75000$.

8. Escreva uma função, que dado nº de NIF permite eliminar todas as informações desse funcionário. 

*/


//bibliotecas
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <string.h>
#include <conio.h>
#include <time.h>


//Dados do funcionário
struct Funcionario {
    char nome[20];
    int NIF;
    char categoria;
    float salario;
    int Hora_Trabalhados;
    //Verificar se está ativo no Sistema
    int ativo;
};

// Para não atrapalhar o bom funcionamento
void pressioneEnter() {
    char c;
    do {
        c = getch();
    } while (c != 13);
}


void IncerirFuncionario(struct Funcionario funcionario[],int n) {
    system("COLOR 0F");
    int i;
    FILE *file; // cria variável ponteiro para o arquivo
    file= fopen("funcionarios.txt", "w"); //abrindo o arquivo
    if(file == NULL) //testando se o arquivo foi realmente criado
        printf("\n-->não foi possivel abrir o fecheiro\n\n");
    else {
        printf ("\n\n\n\n\tUNICV \n\n");
        printf("\n\n\n\t\tDigite o numero de Funcionarios que pretende registrar: ");
        scanf("%i",&n);
        fflush(stdin);
        system("cls");
        static int i=0;
        int y=n+i;
        if(y>99)
            menu(funcionario,n);
        printf("\n\n\n\t\t-------- INSCRIÇÃO DE FUNCIONÁRIO --------\n\n");
        fprintf(file,"\n\n\t----- LISTA DOS FUNCIONÁRIOS ----\n\n");
        fprintf(file,"\tNome      NIF       Salário     Categoria  Horas\n\n");
        for(; i<y; i++) {
            system("COLOR 0B");
            // para obter dados e armazenar no arquivo
            printf("\n\tDigite o nome do funcionário: ");
            scanf(" %s",&funcionario.nome);
            printf("\n\tDigite o NIF do funcionário: ");
            scanf("%d",&funcionario.NIF);
            printf("\n\tDigite o salario do funcionario: ");
            scanf("%f", &funcionario.salario);
            printf("\n\tDigite a categoria do funcionário: ");
            scanf(" %c", &funcionario.categoria);
            printf("\n\tDigite a Hora trabalhados pelo funcionário: ");
            scanf("%d", &funcionario.Hora_Trabalhados);
            printf("\n\n");
            //A Escrevendo no arquivo
            fprintf(file,"\t%s \t %d \t %.1f \t %c\t %d\n",funcionario.nome,funcionario.NIF,funcionario.salario,funcionario.categoria,funcionario.Hora_Trabalhados);
        }
        printf("\n\t\t-------------------------<3--------------------------\n");
        printf("\n\t Incritos com sucesso! \n\n\t Registado no fecheiro -> funcionarios.txt\n\n");
        printf ("\n\n\n\t\t\tPressione ENTER para Continuar->");
        fflush(stdin);
        pressioneEnter();
        system("cls");
        menu(funcionario,y);
    }
    fclose(file); // para fechar o arquivo
}

void ImprimirFuncionarios(struct Funcionario funcionario[],int n) {
    FILE *file;

    file = fopen("C:\\Users\\alex\\Desktop\\teste4\\funcionarios.txt", "r");
    if(file == NULL)
        printf("\n-->não foi possivel abrir o fecheiro\n\n");

    else {
        int i;
        printf("\n\n\n\t\t------- LISTA DOS FUNCIONÁRIOS ------\n\n");
        for(i=0; i<n; i++) {
            system("COLOR 0F");
            fscanf(file,"%s",funcionario.nome);
            fscanf(file,"%d",funcionario.NIF);
            fscanf(file,"%.1f $00",funcionario.salario);
            fscanf(file,"%c",funcionario.categoria);
            fscanf(file,"%d horas",funcionario.Hora_Trabalhados);
            printf("\n\tNome: %s",funcionario.nome);
            printf("\n\tNIF: %d",funcionario.NIF);
            printf("\n\tSalario: %.1f $00", funcionario.salario);
            printf("\n\tCategoria: %c",funcionario.categoria);
            printf("\n\tHoras de trabalho: %d horas", funcionario.Hora_Trabalhados);
            printf("\n\n----------------------------------------------------------\n");
        }
    }

    printf ("\n\n\n\t\t\tPressione ENTER para Continuar->");
    fflush(stdin);
    pressioneEnter();
    system("cls");
    fclose(file);

}
void OrdenarFuncionario(struct Funcionario funcionario[],int n){

}


void EliminarFuncionario(struct Funcionario funcionario[],int n) {
    FILE *file;

    //Abre o arquivo novamente para leitura
    file = fopen("funcionarios.txt", "r+");
    if(file == NULL)
        printf("\n-->não foi possivel abrir o fecheiro\n\n");

    else {
        int nif, i;
        char resp;
        printf("\n\tInforme o NIF do funcionario a ser Eliminado: ");
        scanf("%d",&nif);

        while( funcionario.NIF == nif ) {
            // FALTOU

            if ( funcionario.ativo== 1 ) {

                printf("\n\tNome: %s",funcionario.nome);
                printf("\n\tNIF: %d",funcionario.NIF);
                printf("\n\tSalario: %.1f $00", funcionario.salario);
                printf("\n\tCategoria: %c",funcionario.categoria);
                printf("\n\tHoras de trabalho: %d horas", funcionario.Hora_Trabalhados);
                printf("\n\n----------------------------------------------------------\n");
            }
            printf("\n\tDeseja realmente eliminar o Funcionário? S/N:");
            scanf("%c",&resp);

            if ( ( resp == 'S' ) || ( resp == 's' ) ) {
                funcionario.ativo=0;
                printf("\n\tFuncionário eliminado com sucesso\n");
                break;
            } else {
                if ( ( resp == 'N' ) || ( resp == 'n' ) ) {
                    printf("\tEliminação cancelada!\n");
                    break;
                }
            }
        }
        i++;

    if ( i > 99 )
        printf("\n\n\t\tNIF não encontrado\n");
}
    fclose(file);
    printf ("\n\n\n\t\t\tPressione ENTER para Continuar->");
    fflush(stdin);
    pressioneEnter();
    system("cls");
}

void menu(struct Funcionario funcionario[],int n) {
    int op;
    do {
        system("COLOR 0F");  //Menu
        printf("\n\n\t\t\t\t---> SISTEMA DE REGISTO E CONTROLE DE FUNCIONÁRIO \n\n");
        printf("\n\t\t* 1 ------- INSERIR OS FUNCIONÁRIOS E ENVIA-LOS PARA O FICHEIRO ------------------------ *\n");
        printf("\n\t\t* 2 ------- IMPRIMIR A LISTA DOS FUNCIONÁRIOS DO FICHEIRO ------------------------------ *\n");
        printf("\n\t\t* 3 ------- IMPRIMIR OS FUNCIONÁRIOS POR CATEGORIA ------------------------------------- *\n");
        printf("\n\t\t* 4 ------- GASTO DA UNIVERSIDADE COM OS FUNCIONÁRIOS ---------------------------------- *\n");
        printf("\n\t\t* 5 ------- CALCULAR O SALÁRIO DE UM FUNCIONÁRIO X EM FUNÇÃO DO SEU SALÁRIO POR HORA --- *\n");
        printf("\n\t\t* 6 ------- ORDENAR FUNCIONÁRIO NA ORDEM CRESCENTE ------------------------------------- *\n");
        printf("\n\t\t* 7 ------- IMPRIMIR OS FUNCIONÁRIOS COM SALÁRIO MAIOR QUE 75000$ ---------------------- *\n");
        printf("\n\t\t* 8 ------- ELIMINAR UM FUNCIONÁRIO A PARTIR DO Nº DO NIF ------------------------------ *\n");
        printf("\n\t\t* 0 ------- Sair\n\n");
        printf("\n\tEscolha uma opcao: ");
        scanf("%d",&op);
        printf("\n");
        switch (op) {
        case 0:
            printf("\n\n\n\n\n\t-> Saindo... \n\n");
            break;
        case 1:
            system("cls");
            IncerirFuncionario(funcionario,n);
            break;
        case 2:
            system("cls");
            ImprimirFuncionarios(funcionario,n);
            break;
        case 8:
            system("cls");
            EliminarFuncionario(funcionario,n);
            break;
        default:
            system("COLOR C0");
            printf("\n\t\t\t\t*-*-*-*-- ERRO --> Numero INVALIDO!\n\n");
            printf ("\n\tPressione ENTER para Tentar Novamente->");
            fflush(stdin);
            pressioneEnter();
            system("cls");
        }
    } while (op != 0);

   int main() {
        setlocale(LC_ALL, "Portuguese");
        struct Funcionario funcionario[100];
        int n;
        printf ("\n\tPressione ENTER para iniciar->");
        fflush(stdin);
        pressioneEnter();
        system("cls");
        menu(funcionario,n);
        return 0;
    }
 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...