O meu deu errado veja, fiz tudo certinho como estava no programa:
não deu errado… o sobrenome está sendo limitado a 50 caracteres
kd o erro?
vc tá falando do Ú? parece mais problema de fonte do que erro em si
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
.
Fiz de novo, porque o seu programa é muito avançado para mim, gostaria de uma coisa mais básica.
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.
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).
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char nome[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);
return 0;
}
Se tu fizesse um programa semelhante ao programa acima, eu até entenderia, pois é mais básico para mim.
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.
Agora que não estou entendendo nada mesmo, já não sei quem está certo e quem está errado.
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>
int main() {
char nome[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);
return 0;
}
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.
Pera ai…
Estou assistindo um curso de C no YouTube, por enquanto estou nas primeiras aulas.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char nome[50]; // máximo de 49 caracteres válidos
char sobrenome[50]; // máximo de 49 caracteres válidos
char nomecompleto[100]; // máximo de 99 caracteres válidos
printf( "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ão
fgets( nome, 50, stdin );
// remarca o fim da string para remover o pulo de linha que fgets lê.
nome[strlen(nome)-1] = '\0';
// idem acima
printf("Digite o seu sobrenome: ");
fgets( sobrenome, 50, stdin );
sobrenome[strlen(sobrenome)-1] = '\0';
// copia o conteúdo de nome para nomecompleto
strcpy( nomecompleto, nome );
// concatena em nomecompleto um espaço
strcat( nomecompleto, " " );
// concatena em nomecompleto o conteúdo de sobrenome
strcat( nomecompleto, sobrenome );
// imprime o conteúdo de nome completo na saída
printf("O seu nome completo é %s", nomecompleto);
return 0;
}
O mais simples que consigo fazer:
#include <stdio.h>
int main(void) {
char nome[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);
return 0;
}
Se nome for “Joao Carlos” seu programa não funciona como esperado.
De fato, não percebi esse detalhe, melhor usar fgets mesmo.