Ir ao conteúdo
  • Cadastre-se

Lucca Rodrigues

Membro Pleno
  • Posts

    1.081
  • Cadastrado em

  • Última visita

Tópicos solucionados

  1. O post de Lucca Rodrigues em Linguagem C While Repetição como Usar? foi marcado como solução   
    @RodolfoM Continua faltando o que já faltava anteriormente.
    Alguns erros:
    - Não da pra entender nada do que está sendo impresso em seu programa. Só números estão sendo impressos, e não da pra adivinhar o que são esses números:

    - Eu tinha dito que era pra incrementar c inicializado com 0 até atingir o valor de num, você não fez isso.
    - Usou a estrutura de repetição do while. Nesse caso, um laço for é melhor.
    - Não imprima nada no loop, só os números pares. Você só vai imprimir o resto quando sair do loop.
    - A variável que representa a média é do tipo int em seu programa, e já que existe a possibilidade de não ser do tipo inteiro, deveria ser do tipo float ou double.
    - "soma = c+c" não fará com que sejam somados os números pares à variável soma, na verdade, será atribuído à ela c+c. Deveria ser algo como: soma += c, que é o mesmo de soma = soma + c. Você fez errado para a variável soma dos pares, mas certo para a variável produto dos ímpares e divisíveis por 9: p = p*c.
    - Faltou calcular a média e imprimir os números pares.
     
    Pra facilitar a vida, c pode ser inicializado com 1.
    Isso aqui poderia ser algo parecido com o que você está tentando fazer:
    #include <stdio.h> #include <locale.h> int main() { int num, c, somapar = 0, prodimpar = 1; float media; printf("Insira um número: "); do{ scanf("%d", &num); }while(num == 0); printf("\nPares:\n"); for(c = 1; c <= num; c++){ if(c % 2 == 0){ // Imprimindo números pares printf("%d\n", c); // Soma dos pares somapar += c; }else { if(c % 9 == 0){ // Produto dos ímpares e divisíveis por 9 prodimpar *= c; } } media += c; } printf("\nSoma dos pares: %d", somapar); printf("\n\nProduto dos ímpares e divisíveis por 9: %d", prodimpar); // Média media /= num; printf("\n\nMédia de todos os números: %.2f", media); return 0; }
  2. O post de Lucca Rodrigues em "Operadores Lógicos" para char foi marcado como solução   
    @AndreyPradoAP Para facilitar a visualização, use essa ferramenta aqui para postar códigos:

    Não se esqueça de escolher a opção C, C++, C#, Java, Objective C.
    Não se esqueça também de postar todo o código, isso inclui as bibliotecas, a main, as variáveis, etc.
     
    A respeito do seu programa...
    Não use a função gets(). Se você entrar com uma string maior do que o tamanho declarado, pode ocasionar um buffer overflow, use a função scanf() em vez disso.
    Você não precisa comparar a string sexo com uma string que um único caractere. Ao invés disso, compare sexo[0] (que é onde a letra que você inseriu está) com o caractere em questão.
    Faça um loop para caso sexo[0] != 'm' && sexo[0] != 'f' (caso o caractere inserido for diferente de 'm' e de 'f'), o caractere seja cobrado novamente.
    Como a função usada será scanf(), limite a quantidade de caracteres para 1, ou então declare um char e não uma string, o que faz muito mais sentido nesse caso: caso sexo != 'm' && sexo != 'f', o caractere deve ser cobrado novamente.
     
    Teste isso:
    #include <stdio.h> int main() { char sexo; printf("Digite o sexo do canidato (m/f): "); scanf("%c%*c", &sexo); // Lê caractere e deleta /n while (sexo != 'm' && sexo != 'f'){ // Se for diferente de 'm' e 'f' printf("\nSexo inválido! Digite novamente (m/f): "); scanf("%c%*c", &sexo); } return 0; }
  3. O post de Lucca Rodrigues em Calcular seno e cosseno no c++ sem usar bibliotecas foi marcado como solução   
    @Lucas Fernande Silva É assim que funciona a expansão do seno e cosseno, você vai fazer um somatório com um loop for.

    n é seu contador e x é o ângulo em radianos.
    Tente fazer algo e poste aqui.
  4. O post de Lucca Rodrigues em visualg bug esperava encontrar então foi marcado como solução   
    @IgorSilva05
    O visualg não é muito bom em dizer qual é o problema, mas pelo menos ele te diz onde está o erro.
    P é do tipo caractere. Se quer comparar com a string "Sim", então precisa colocar Sim entre aspas.
  5. O post de Lucca Rodrigues em Programa que retorne qual dia da semana aquela data corresponde. foi marcado como solução   
    @samucao82
    O incremento funciona de modo a atualizar o valor do índice:
    for(i = 0; i < tVetor; i = i + 7) Ou:
    for(i = 0; i < tVetor; i += 7)  
    ano[i] vai ser igual a 7, a atribuição vem justamente antes do if, não precisa verificar isso. Aliás, o certo é == pra comparação, = é atribuição.
  6. O post de Lucca Rodrigues em programa que diz se a letra digitada é vogal ou não foi marcado como solução   
    @LucasrodriguesP
    Você tem que comparar letra1 com cada vogal, e não simplesmente colocar uma vírgula e as demais vogais como fez instintivamente acredito eu.
    if (letra1 == 'a' || letra1 == 'e' || letra1 == 'i' || letra1 == 'o' || letra1 == 'u') cout <<"vogal"; else cout<<"consoante";  
    Não. Você pode recorrer ao default:
    switch (letra1) { case 'a': cout << "isso eh vogal"; break; case 'e': cout << "isso eh vogal"; break; case 'i': cout << "isso eh vogal"; break; case 'o': cout << "isso eh vogal"; break; case 'u': cout << "isso eh vogal"; break; default: cout << "isso eh consoante"; } Se o controle não for transferido pra nenhum case, será transferido para default.
  7. O post de Lucca Rodrigues em c/c++ não faz a cópia de valores foi marcado como solução   
    @Ninenome Você não precisa atribuir membro por membro da estrutura. Assim como atribuiu o retorno de lerDados() à dados[i], faça o mesmo para apro e repr, porém use cont e cont1 como índice:
    apro[cont] = dados[i]; cont++; //... repr[cont1] = dados[i]; cont1++; Afinal, só incrementamos o contador para estes quando for encontrada uma nota num intervalo específico, assim como estabeleceu com o comando if.
    /* 11. Faca um programa que leia os dados de 10 alunos (Nome, matricula, Media Final), armazenando em um vetor. Uma vez lidos os dados, divida estes dados em 2 novos vetores, o vetor dos aprovados e o vetor dos reprovados, considerando a media mınima para a aprovacao como sendo 5.0. Exibir na tela os dados do vetor de aprovados, seguido dos dados do vetor de reprovados. */ #include <iostream> #include <cstring> using namespace std; struct Alunos { char nome[40]; int matricula; double mediaFinal; }; Alunos lerDados(); void imprimirDados(Alunos ap[], Alunos rp[], int c, int c1); int main() { int i, cont = 0, cont1 = 0; Alunos dados[3]; Alunos apro[3]; Alunos repr[3]; for(i = 0; i < 3; i++) { dados[i] = lerDados(); } for(i = 0; i < 3; i++) { if(dados[i].mediaFinal > 5.0) { apro[cont] = dados[i]; cont++; } } for(i = 0; i < 3; i++) { if(dados[i].mediaFinal < 5.0) { repr[cont1] = dados[i]; cont1++; } } imprimirDados(apro, repr, cont, cont1); return 0; } Alunos lerDados() { Alunos p; char nl[6]; int n1, n2, n3; cout<<"Nome do aluno: "<<endl; cin.getline(p.nome,40); cin.sync(); cout<<"Matricula: "<<endl; cin>>p.matricula; cin.sync(); cout<<"Digite as notas 1, 2, 3: "<<endl; cout<<"Nota 1: ";cin>>n1; cout<<"Nota 2: ";cin>>n2; cout<<"Nota 3: ";cin>>n3; cin.sync(); cout<<endl; p.mediaFinal = (n1 + n2 + n3)/3; cin.getline(nl,6); return p; } void imprimirDados(Alunos ap[], Alunos rp[], int c, int c1) { int i; for(i = 0; i < c; i++) { cout<<"--------APROVADO--------"<<endl; cout<<"Nome.......: "<<ap[i].nome<<endl<<endl; cout<<"Matricula..: "<<ap[i].matricula<<endl<<endl; cout<<"Media final: "<<ap[i].mediaFinal<<endl<<endl; } for(i = 0; i < c1; i++) { cout<<"--------REPROVADO--------"<<endl; cout<<"Nome.......: "<<rp[i].nome<<endl<<endl; cout<<"Matricula..: "<<rp[i].matricula<<endl<<endl; cout<<"Media final: "<<rp[i].mediaFinal<<endl<<endl; } }  
  8. O post de Lucca Rodrigues em Esperava encontrar ENTAO BubbleSort foi marcado como solução   
    @Luccas Fernando indi começa em 0, e indj é decrementado até atingir o valor de indi.
    Sua condição:
    Conclusão: não vai dar pra acessar o valor de índice -1 do vetor.
    Pra solucionar, você pode fazer indj ser decrementado até atingir indi + 1.
  9. O post de Lucca Rodrigues em Encontrar número primo no vetor foi marcado como solução   
    @Gabbie1
    Acredito que sua intenção com isso era verificar o resto da divisão dos elementos do vetor `vet` com valores partindo de 2 até o valor de `vet` - 1, mas veja que você está incrementando um índice `i` que está sendo usado para indexar o vetor `vet`, e também esse índice `i` não é incrementado até atingir o valor de `vet` - 1, mas sim até atingir o valor de `tam`.
    Aliás, o vetor deve ter espaço para 10 elementos, e você terá que atribuir 0 à `cont` sempre que precisar avaliar outro valor de `vet`.
    Você pode usar dois loops, veja:
    #define tam 10 #include <stdio.h> int main (void){ int vet[tam], cont; for (int i = 0; i < tam; i++) { printf ("Insira um numero maior que 1: "); scanf ("%d%*c", &vet[i]); } puts("\nNumeros primos encontrados:"); for (int i = 0; i < tam; i++) { cont = 0; for (int j = 2; j < vet[i]; j++) { if (vet[i] % j == 0) cont++; } if (cont == 0) printf("Numero: [%d] | Posicao no vetor: [%d]\n", vet[i], i); } return 0; }
  10. O post de Lucca Rodrigues em Simulador de um estacionamento foi marcado como solução   
    @Elize Yakamura A condição do segundo if é:
    Tinha me confundido
    A terceira condição é caso o valor de horas seja acima de 6h até 24h, então a segunda tem que avaliar se `horas` é menor ou igual a 6h.
    Aliás, usualmente podemos usar o sufixo f para atribuir um valor à uma variável do tipo float. Ex:
    total = 5.0f; // 5 é int // 5.0 é double  
    Sobre isso:
    Se quer mostrar a permanência em horas no final, terá que usar uma variável auxiliar para não afetar o valor de `horas`.
    Veja:
    #include <stdio.h> int main() { int horas; char placa[10]; float total; puts("Placa do veiculo:"); scanf("%9s%*c", placa); puts("Horas de permanencia:"); scanf("%d%*c", &horas); if (horas <= 3) total = 5.0f; else if (horas <= 6) total = 5.0f + ((horas - 3) * 2.5f); else if(horas <= 24) total = 25.0f; else { // Variavel auxiliar int aux = horas; while(aux > 0) { aux -= 24; total += 25.0f; } } printf("Placa: %s\nHoras de permanencia: %d\nTotal: %.2f", placa, horas, total); return 0; }
  11. O post de Lucca Rodrigues em Simular funções bancárias básicas foi marcado como solução   
    @Elize Yakamura
    A variável tem que ser declarada no escopo global, variáveis globais são criadas a partir da colocação das declarações de variável fora de qualquer definição de função, isso difere do que fez:
    Ela deve ser declarada com o especificador de classe de armazenamento static e deve ser inicializada com valor 1000.
    Quando static é aplicado a uma variável global ou a uma função, evita que ela seja usada por qualquer função que não tenha sido definida no mesmo arquivo.
     
    Bem, convenhamos que uma função que tem como propósito chamar outra função é um desperdício...
    Você poderia só chamar a printf() na main() mesmo.
    Veja:
    #include<stdio.h> static int dinheiro = 1000; void depositar(int valorDep) { printf ("Digite a quantia a ser depositada: "); scanf("%d%*c", &valorDep); dinheiro += valorDep; } void sacar(int valorSaq) { printf ("Digite a quantia a ser sacada: "); scanf("%d%*c", &valorSaq); dinheiro -= valorSaq; } int main() { int deposito, saque, opcao = 1; do{ puts("---BANCO---"); puts("1. Deposito"); puts("2. Saque"); puts("3. Saldo"); puts("0. Sair"); scanf("%d%*c", &opcao); switch(opcao) { case 1: depositar(deposito); break; case 2: sacar(saque); break; case 3: printf("Saldo: %d\n", dinheiro); break; case 0: printf("Até mais!\n"); break; default: printf("Digite uma opção válida\n"); } } while(opcao); return 0; }
  12. O post de Lucca Rodrigues em Limites de float, double e long double foi marcado como solução   
    @Luccas Fernando
     
    De certo modo, não há um valor.
    Digo, para a parte inteira desses limites há.
    Basta imprimir o número.
    Na saída, imprimindo FLT_MAX irá observar algo assim:
    340282346638528859811704183484516925440.000000 Condiz com o valor que postou, e são 39 caracteres de parte inteira.
    Se tentar imprimir FLT_MIN, quanto menos casas após a vírgula, maior a imprecisão:
    0.000000 0.00000000000000000000000000000000000001175494351 0.000000000000000000000000000000000000011754943508222875079687
  13. O post de Lucca Rodrigues em Questão em C do IME (USP) - Sequência de números piramidal m-alternante foi marcado como solução   
    Recomendo tentar resolver sua tarefa em vez de copiar de algum lugar e não entender o que foi feito... É pro seu bem
  14. O post de Lucca Rodrigues em como fazer o mouse clicar em uma posição da tela foi marcado como solução   
    @devair1010
    Não sei bem se entendi a finalidade 🤔
     
    Se quer sintetizar o evento de um clique do mouse, pode usar SendInput():
    #include <stdio.h> #include <windows.h> int main() { INPUT in; in.type = INPUT_MOUSE; in.mi.dwFlags = MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP; in.mi.time = 0; SendInput(1, &in, sizeof(in)); return 0; } Você pode ler sobre a função aqui, dê uma olhada nas estruturas INPUT e MOUSEINPUT também.
  15. O post de Lucca Rodrigues em como fazer para fazer substituição de string foi marcado como solução   
    @felipenoronha `COD´ deveria ser uma string, e se o tal código tem só 5 caracteres, declare uma string com espaço para 6, já que deve deixar espaço para o terminador: caractere nulo ou '\0'.
    char COD[6]; E não precisa de & na scanf() para ler e gravar a partir do elemento de índice 0 da string, os caracteres serão lidos e gravados partindo da posição 0 da string sem o &, mas se quiser pode fazer assim também:
    scanf ("%5s", &COD[0]); Dá no mesmo.
    O 5 que coloquei depois do % é para limitar a quantidade de caracteres lidos e gravados na string para 5.
    Agora, se quer comparar strings, use strcmp(). Vejo que já incluiu string.h mas não usou a função, veja:
    if (strcmp(COD, "SU001") == 0) printf("CODIGO = vt001"); SU001 é uma string, e deve estar entre aspas.
    Caso strcmp() retorne 0 as strings são idênticas, e é isto que está sendo verificado.
  16. O post de Lucca Rodrigues em como fazer para fazer substituição de string foi marcado como solução   
    @felipenoronha `COD´ deveria ser uma string, e se o tal código tem só 5 caracteres, declare uma string com espaço para 6, já que deve deixar espaço para o terminador: caractere nulo ou '\0'.
    char COD[6]; E não precisa de & na scanf() para ler e gravar a partir do elemento de índice 0 da string, os caracteres serão lidos e gravados partindo da posição 0 da string sem o &, mas se quiser pode fazer assim também:
    scanf ("%5s", &COD[0]); Dá no mesmo.
    O 5 que coloquei depois do % é para limitar a quantidade de caracteres lidos e gravados na string para 5.
    Agora, se quer comparar strings, use strcmp(). Vejo que já incluiu string.h mas não usou a função, veja:
    if (strcmp(COD, "SU001") == 0) printf("CODIGO = vt001"); SU001 é uma string, e deve estar entre aspas.
    Caso strcmp() retorne 0 as strings são idênticas, e é isto que está sendo verificado.
  17. O post de Lucca Rodrigues em como fazer para fazer substituição de string foi marcado como solução   
    @felipenoronha `COD´ deveria ser uma string, e se o tal código tem só 5 caracteres, declare uma string com espaço para 6, já que deve deixar espaço para o terminador: caractere nulo ou '\0'.
    char COD[6]; E não precisa de & na scanf() para ler e gravar a partir do elemento de índice 0 da string, os caracteres serão lidos e gravados partindo da posição 0 da string sem o &, mas se quiser pode fazer assim também:
    scanf ("%5s", &COD[0]); Dá no mesmo.
    O 5 que coloquei depois do % é para limitar a quantidade de caracteres lidos e gravados na string para 5.
    Agora, se quer comparar strings, use strcmp(). Vejo que já incluiu string.h mas não usou a função, veja:
    if (strcmp(COD, "SU001") == 0) printf("CODIGO = vt001"); SU001 é uma string, e deve estar entre aspas.
    Caso strcmp() retorne 0 as strings são idênticas, e é isto que está sendo verificado.
  18. O post de Lucca Rodrigues em questão de programação em c . foi marcado como solução   
    @Caio Fagundes21 Sempre poste o programa completo para que não tenhamos que completá-lo com por exemplo as bibliotecas necessárias pra compilar.
    Eu editei seu programa, dê uma lida nos comentários:
    // Faltou incluir stdio.h #include <stdio.h> int main(){ // Nao precisa daquela variavel // resto. int dias; int h; int m; int s; // Evite acentuacao em printf(). printf("Conversao:"); // Use %*c para ler e ignorar // o '\n' digitado ao pressionar // a tecla Enter. scanf("%d%*c", &s); // A logica eh quase essa mesmo // que voce tinha feito... Apenas // mudei algumas coisas. dias = s / 86400; h = (s / 3600) % 24; m = (s / 60) % 60; s = s % 60; printf(" %d dias, %d horas, %d minutos e %d segundos. ", dias, h, m, s); return 0; } Na saída:

  19. O post de Lucca Rodrigues em Declarar nome com Switch foi marcado como solução   
    @Guga04
    Uma string não pode ser o valor da expressão de switch, se é essa sua pergunta.
    Se quer comparar strings, use strcmp(). Essa função retorna 0 se as strings são iguais, dê uma olhada:
    #include <stdio.h> #include <string.h> int main() { char str1[20] = "quinta-feira"; char str2[5][20] = { "segunda-feira", "terca-feira", "quarta-feira", "quinta-feira", "sexta-feira" }; int i; for(i = 0; i < 5; i++) if(strcmp(str1, str2[i]) == 0) break; if(i < 5) printf("String <%s> encontrada na posicao <%d> do vetor", str2[i], i); else printf("String <%s> nao encontrada", str1); return 0; } Temos uma string (str1), um vetor de strings (str2) e um laço para comparar cada uma das strings do vetor str2 com str1. Se a string é encontrada, ou seja, se strcmp retorna 0, break transfere o controle para fora do laço.
  20. O post de Lucca Rodrigues em Tentativa de compilar falhando foi marcado como solução   
    @Um mero usuário
    Comando? Me refiro à biblioteca curses que tem a função getch().
    E qual seu sistema operacional? É do tipo Unix?
    Não sei programar pra esse tipo de sistema, contudo, a ideia é a mesma tanto pra Windows quanto pra Unix.
    Da uma olhada nesse link, tem a implementação da getch() lá, e usa funções dessa tal termios pra alterar o modo de entrada:
    #include <stdio.h> #include <termios.h> int getch(void) { struct termios velho, novo; int ch; tcgetattr(0, &velho); novo = velho; novo.c_lflag &= ~ICANON; novo.c_lflag &= ~ECHO; // Alterando tcsetattr(0, TCSANOW, &novo); ch = getchar(); // Restaurando tcsetattr(0, TCSANOW, &velho); return ch; } int main () { char menu = getch(); printf("<%c>", menu); return 0; }  
  21. O post de Lucca Rodrigues em tipos de input em C foi marcado como solução   
    scanf() é pra ler dados formatados.
    cout é do c++, controla inserções na saída.
    gets() é pra ler uma string da stdin com a possibilidade de ocasionar um buffer overflow, é obsoleta.
    fgets() é pra ler uma string de um fluxo.
    A semelhança é que todos te possibilitam ler alguma coisa, exceto cout
     
    Você usa uma função quando precisa que uma tarefa específica seja realizada, e existem várias outras funções com o mesmo propósito além dessas que você citou.
    fgets() é convenientemente usada para ler strings, pois esse é o propósito da mesma.
    scanf() é normalmente usada nesses programas interativos pra ler dados do teclado, embora seu uso não se restrinja a isso...
     
    A questão é saber usar aquelas funções, todas tem esse risco se você não souber usar.
    Aliás, não use a gets(), essa não tem como evitar mesmo
     
    Em Windows, basta desabilitar Line Input, use SetConsoleMode().
    Em Linux, desabilite Cooked Mode.
    Depois disso, você pode usar fgetc(), getchar(), etc. E daí é só restaurar para o modo original.
    Isso já foi discutido algumas vezes aqui no fórum, dê uma olhada e acompanhe a discussão:
     
  22. O post de Lucca Rodrigues em Alguém sabe porque a linha do scanf está anulando a função (lerstring) ? foi marcado como solução   
    @mauricioqueiroz93 
    lerstring() não está sendo anulada, mas é fato que os dados não estão sendo todos consumidos pela scanf().
    O motivo disso? Veja:
    #include <stdio.h> int main() { int x; char c; printf("Digite um numero: "); scanf("%d", &x); printf("Digite um caractere: "); scanf("%c", &c); printf("Respostas: <%d> <%c>", x, c); return 0; } Na saída:

    Isso ocorre porque eu digitei '5' e '\n' (Enter), como o '\n' não interessa na leitura de um inteiro, ele permanece na stdin até que você o leia, e foi o que aconteceu quando eu chamei a scanf() novamente, o '\n' foi lido e armazenado na variável c.
    Pra solucionar isso, você pode ler e ignorar esse caractere com um especificador da seguinte forma: %*c.
    Veja:
    #include <stdio.h> int main() { int x; char c; printf("Digite um numero: "); scanf("%d%*c", &x); printf("Digite um caractere: "); scanf("%c%*c", &c); printf("Respostas: <%d> <%c>", x, c); return 0; } Na saída:

    Agora está tudo certo
     
    Alguns outros erros:
    Você colocou 2 argumentos e 1 especificador de formato.
     
    O que sobra de uma leitura não é lixo, então você não tem que limpar nada, tem que consumir o que resta no fluxo, e é o que você está fazendo com fgets().
    Você pode usar fgetc() e ler caractere por caractere até encontrar um '\n' ou EOF:
    int ch; while((ch = fgetc(stdin)) != '\n' && ch != EOF);  
    Se quer usar num loop ou coisa assim, inicialize o índice ´i´ antes.
  23. O post de Lucca Rodrigues em Process Returned -1073741819 (0xc0000005) Code::Blocks foi marcado como solução   
    @Verniana Olá.
     
    Evite declarar variáveis globais, só vai te dar problemas...
     
    Nome_do_Filme é uma string, e com & você está passando o endereço de que?
    Se quiser usar &, use assim:
    scanf("%99[^\n]", &Cine[i].Nome_do_Filme[0]); Dessa forma, você passa o endereço do primeiro elemento da string, mas normalmente só usamos & quando queremos que a leitura seja efetuada a partir de um elemento cujo índice não seja 0, então você pode simplesmente omitir o &.
    Aliás, percebeu que tem um 99 depois do % lá? Justamente porque scanf() não tem como saber o tamanho da string, então você tem que dizer pra ela quantos caracteres podem ser lidos e armazenados, e você declarou uma string com espaço para 99 caracteres não-nulos + 1 caractere nulo. Por isso é mais conveniente usar fgets() para ler strings, eu postei sobre isso aqui:
     
    Não use fflush() dessa forma, use apenas para streams de saída.
    Se está usando na entrada é porque talvez notou que se não usar, a próxima chamada da scanf() fica zoada... E bem, quando você termina de inserir os dados, você pressiona a tecla Enter, portanto sobra um '\n' na stdin que poderá ser lido na próxima chamada da scanf().
    Pra solucionar isso, você pode ler e ignorar esse caractere com um especificador da seguinte forma: %*c.
    Dessa forma você consome todos os dados, e é o que se espera em um programa assim.
  24. O post de Lucca Rodrigues em Exercício sobre pseudocódigo linguagem C foi marcado como solução   
    @joaoferraz10 Dê uma lida aí nos comentários:
    #include <stdio.h> // Nao precisa dos cabecalhos abaixo //#include <locale.h> //#include <math.h> int main(){ // Nao precisa dessa funcao //setlocale(LC_ALL, "Portuguese"); // Seria melhor declarar uma variavel por linha int a = 3; int b = 5; int c = 8; int y = 1; // Faltou os parenteses do if if ((a*b) > (c+b+6)){ // Faltou ; aqui y = y + ((c+1) / a); } else{ y = ((b*3) / (a+c+4)) + y; } // Por que esta imprimindo isso? //printf("FIM-SE"); printf("y = %d\n", y); return 0; }
  25. O post de Lucca Rodrigues em Estrutura de Dados em C foi marcado como solução   
    @MQTTH Basta ler a documentação:
    scanf()
    fgets()
    fgets() tem as vezes o inconveniente fato de ler o '\n' inserido ao se teclar Enter, então não podemos deixar isso passar, a menos que você queira esse caractere na sua string.
     
    char str[101]; fgets(str, sizeof(str), stdin); if(str[0] != 0){ if (str[strlen(str)-1] == '\n'){ // Caso haja um '\n' logo antes do '\0' str[strlen(str)-1] = 0; } }  
    scanf() também tem as vezes um inconveniente, esta pode nem sempre consumir todos os dados inseridos via teclado, e para isso usamos um especificador da seguinte forma: %*c. Este lê e ignora um caractere, provavelmente o '\n' teclado.
     
    int x; scanf("%d%*c", &x);  
    Isso não impede o usuário de teclar mais do que ele deveria. Em geral, scanf() não foi escrita pra isso, mas em programas assim, é esperado que você a use.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...