Na linha 8, a comparação é feita com o operador de igualdade “==”, em vez de usar o operador de atribuição “=” para atribuir o valor da concatenação das strings para a variável “nomecompleto”.
Na linha 9, o endereço de memória da variável “nomecompleto” é passado para a função printf(), mas a função printf() já espera um ponteiro para a string (char*) e não um endereço de memória. Portanto, a variável “nomecompleto” deve ser passada diretamente como parâmetro para a função printf().
Na linha 10, a função scanf() está lendo uma string com o “&” antes da variável “nome” e “sobrenome”. No entanto, como as variáveis são arrays de caracteres, não é necessário usar o operador “&” antes delas.
É importante garantir que a concatenação dos nomes não ultrapasse o tamanho máximo de 50 caracteres da variável “nomecompleto”. Portanto, é preciso usar uma função segura para concatenação, como a função strcat().
#include<stdio.h>#include<stdlib.h>#include<string.h>intmain(){charnome[50],sobrenome[50],nomecompleto[100];printf("Digite o seu nome: ");scanf("%s",nome);printf("Digite o seu sobrenome: ");scanf("%s",sobrenome);strcpy(nomecompleto,nome);strcat(nomecompleto," ");strcat(nomecompleto,sobrenome);printf("O seu nome completo é %s",nomecompleto);return0;}
fiz um teste no OnlingeGDB e deu certin:
W
WhiteHat
O meu deu errado veja, fiz tudo certinho como estava no programa:
Vc já abriu este tópico há um tempo atrás, com um programa exatamente igual.
Inclusive, lá eu expliquei que %s não lê os espaços e sugeri uma alternativa com fgets.
W
WhiteHat
Fiz de novo, porque o seu programa é muito avançado para mim, gostaria de uma coisa mais básica.
H
hugokotsubo1 like
Mas lá eu explico que dá pra usar scanf("%[^\n]", nome);. Se bem que fgets é mais recomendado, scanf é ok pra exercícios, mas pra aplicações sérias tem uma série de problemas.
W
WhiteHat
Sim, tu explicou, mas as vezes não adianta explicar para mim,porque eu demoro para cair a ficha devido a sindrome de Noonan,é que sou cabeçudo(tapado).
W
Solucao aceita
WhiteHat
#include<stdio.h>#include<stdlib.h>#include<string.h>intmain(){charnome[50],sobrenome[50],nomecompleto[100];printf("Digite o seu nome: ");scanf("%s",nome);printf("Digite o seu sobrenome: ");scanf("%s",sobrenome);strcpy(nomecompleto,nome);strcat(nomecompleto," ");strcat(nomecompleto,sobrenome);printf("O seu nome completo é %s",nomecompleto);return0;}
Se tu fizesse um programa semelhante ao programa acima, eu até entenderia, pois é mais básico para mim.
D
davidbuzatto1 like
ChatGPT? Sério? As afirmações 3 e 4 estão ERRADAS!
3 … “No entanto, como as variáveis são arrays de caracteres, não é necessário usar o operador “&” antes delas.”
“Não é necessário” é diferente de “não se deve usar”. Usar & precedendo um identificador de um array (que na verdade é um ponteiro) para extrair o endereço do ponteiro, algo que não é esperado pela função, compila, mas não deveria funcionar. Essas IDEs emitem algumas flags para o compilador detectar essas coisas e “consertar” o código durante a compilação. Usar & precedendo um ponteiro onde se espera um endereço de algo que não é ponteiro vai gerar erro em tempo de execução.
4 … “Portanto, é preciso usar uma função segura para concatenação, como a função strcat().”
strcat é segura pra concatenação aonde? É segura pra programinha de brinquedo, não pra o mundo real. Aliás, nem strcpy é segura. Nenhuma delas verifica se o conteúdo cabe onde se quer colocar…
Pelo amor cara, não se baseia no ChatGPT não… Ele se perde muito fácil ainda mais em coisas que precisam de um pouco mais de conhecimento do que se está fazendo.
W
WhiteHat
Agora que não estou entendendo nada mesmo, já não sei quem está certo e quem está errado.
W
WhiteHat
Pode me passar o código certo do programa?
Mas tem que ser semelhante a esse logo abaixo:
#include<stdio.h>#include<stdlib.h>#include<string.h>intmain(){charnome[50],sobrenome[50],nomecompleto[100];printf("Digite o seu nome: ");scanf("%s",nome);printf("Digite o seu sobrenome: ");scanf("%s",sobrenome);strcpy(nomecompleto,nome);strcat(nomecompleto," ");strcat(nomecompleto,sobrenome);printf("O seu nome completo é %s",nomecompleto);return0;}
D
davidbuzatto1 like
Vc não estava estudando Pascal? Se vc se sente mais confortável no Pascal, fica lá. Vc vai criar uma série de problemas conceituais se for focar em C agora. Aprende Pascal direitinho, faz uma enorme quantidade de exercícios, estuda um pouco de sistemas operacionais e arquitetura de computadores depois tenta ir para o C. C direto, sem uma orientação ou um livro que preste só vai te trazer frustrações.
D
davidbuzatto1 like
Pera ai…
W
WhiteHat
Estou assistindo um curso de C no YouTube, por enquanto estou nas primeiras aulas.
D
davidbuzatto1 like
#include<stdio.h>#include<stdlib.h>#include<string.h>intmain(){charnome[50];// máximo de 49 caracteres válidoscharsobrenome[50];// máximo de 49 caracteres válidoscharnomecompleto[100];// máximo de 99 caracteres válidosprintf("Digite o seu nome: ");// nome: onde vai armazenar os dados// 50: o tamanho máximo do buffer, contando o caractere nulo// stdin: ponteiro para um arquivo que indica o fluxo de entrada padrãofgets(nome,50,stdin);// remarca o fim da string para remover o pulo de linha que fgets lê.nome[strlen(nome)-1]='\0';// idem acimaprintf("Digite o seu sobrenome: ");fgets(sobrenome,50,stdin);sobrenome[strlen(sobrenome)-1]='\0';// copia o conteúdo de nome para nomecompletostrcpy(nomecompleto,nome);// concatena em nomecompleto um espaçostrcat(nomecompleto," ");// concatena em nomecompleto o conteúdo de sobrenomestrcat(nomecompleto,sobrenome);// imprime o conteúdo de nome completo na saídaprintf("O seu nome completo é %s",nomecompleto);return0;}
J
JGus
O mais simples que consigo fazer:
#include<stdio.h>intmain(void){charnome[50],sobrenome[50];printf("Digite o seu nome: ");scanf("%s",nome);printf("Digite o seu sobrenome: ");scanf("%s",sobrenome);printf("O seu nome completo e: %s %s",nome,sobrenome);return0;}
D
davidbuzatto1 like
Se nome for “Joao Carlos” seu programa não funciona como esperado.
J
JGus
De fato, não percebi esse detalhe, melhor usar fgets mesmo.
W
WhiteHat
Obrigado amigo, ficou como eu queria, pode fechar o tópico.
D
davidbuzatto1 like
Vc já marcou como resolvido. Isso basta.
H
hugokotsubo2 likes
Pois é, o problema do ChatGPT nem são as respostas erradas, são as meio certas: aquelas que parecem corretas até vc fazer uma análise mais detalhada e perceber a cagada.
O problema é que a maioria não percebe e aceita cegamente tudo que ele diz. Se antes já era importante ter senso crítico, questionar e consultar mais de uma fonte, agora ficou mais importante ainda…
D
davidbuzatto1 like
Exato. Eu já fiz algumas experiências com conceitos de construção de compiladores que é uma disciplina que trabalho há alguns anos. Vem tudo assim, meio certo, meio errado. Só de mudar o idioma a resposta fica quebrada em outras partes. É uma ferramenta interessante? Até acho que é, mas só pra dar um norte, pq pra copiar e colar é absurdamente arriscado.
S
staroski
Pôxa, toda vez que alguém lhe orienta a fazer algo você usa sua síndrome como justificativa para não fazer as coisas.
Desse jeito também não adianta você perguntar já que vai insistir em fazer do jeito que ninguém recomenda.
W
WhiteHat
Já marquei a solução para o problema nesse tópico
R
rodriguesabner
Não entendo da linguagem, fui até o ChatGPT pra ver se auxiliava em algo.
Nem enfatizei que estava 100% correto, somente coloquei o que estava lá.
W
WhiteHat
Administradores desse fórum podem fechar o tópico para mim.