Aula de 2012 e me ajudou em 2021, PQP. Tive que fazer uma lista encadeada onde o usuário digitava o nome da música, a banda/cantor e a duração. Ele também tinha que ter a opção de digitar mais e depois listar todas a que ele digitou. Consegui fazer tudo até chegar nessa parte de string. Toda vez que eu fazia o printf_s, ou acontecia violação de memória ou exibia uns caracteres ÌÍÌÍÌÍÌÍÌÍÌÍÌÍÌÍ. Me ajudou demais cara, muito obrigado!!!
Essa aula ajudou e muito em um probleminha que eu estava, valeu e continue assim, nos oferecendo boas oportunidades de desenvolver nossa linha de logica. parabéns!
Italo, só faltou uma coisa nas aulas sobre entrada de strings, o formatador %[^ ], que recebe strings contendo espaço, não precisa fazer o ciclo while, se comporta de forma idêntica ao %s porém reconhece espaços, e para exibir no printf usa o %s mesmo. E aqui, nos scanf em string, quando coloco o & dá erro, para entrada de strings não usa-se o &. Ex: printf("Insira nome e sobrenome: "); scanf("%[^ ]",nome); printf("Seu nome e sobrenome: %s ",nome);
Era pra ser uma coisa tão simples, né? E a linguagem C dificulta algo tão banal... adorei sua solução. Deveria ter visto esse video quando eu estava sofrendo com o escondido do fgets, rs. Meu professor de estrutura de dados pede todo mês relatórios dos videos do seu canal. E eu passei em linguagem de programação por causa desses videos, se não... rs. Parabéns, seu curso de C é muito bom!
Também tem o "fgets", uso bastante ele porem há um problema na entrada de dados, quando você escreve um nome ou uma frase e em seguida você pressiona ENTER, ela pega o enter junto, como se fosse uma letra da frase, no caso ' ', mas pode ser resolvido com a função strlen, código em seguida: #include #include int main() { char nome[30]; fgets(nome,30, stdin); nome[strlen(nome)-1]='\0'; printf("%s", nome); return 0; }
Oi ítalo , sou novo no seu canal aqui e to curtindo muito apesar da minha dificuldade de assimilação , e entendo bem com vc explicando, pena q quando eu pego no pesado pra programar, da um branco eu esqueço tudo, acho que to dormindo pouco. Parabéns pelo trabalho. Mas vem cá, o que vc usa pra substituir os comandos system("pause") , system( "cls") e getch() quando necessário no Xcode Mac? To apanhando que dói em cada vez que possui um comando que não roda no Mac e Ródano Windows...
Dessa maneira tudo fica mais simples !!! #include #include int main(){ char palavra[50]; printf("DIGITE SEU NOME: "); gets(palavra); printf(" O NOME DIGITADO FOI >> %s
Sim mano assim é mais fácil, mas ele fez daquela forma ai encima no vídeo, para ensinar a função getchar , e uma dica: a função gets ela não existe mais na ultima padronização que ouve em C, e substituída pela função fgets que faz a mesma coisa de gets e é mais confiavel, no casa do seu codigo ficaria assim: gets(palavra) // forma menos confiável & que não existe mais na ultima padronização fgets(palavra, 50, stdin) // Forma Correta & Mais confiavel
Rogerio Cruzz pelo pouco que eu sei, gets n é nem um pouco confiável por conta do Buffer Overflow, o transbordamento de dados. A função gets n limita o usuário a digitar uma quantidade maxima de caracteres, ou seja, ele pode simplesmente escrever 1000000 de caracteres, muito mais que o seu vetorzinho char[20], por exemplo, aguentaria. Dessa forma esses dados sobressalentes seriam alocados em espaços de memória adjacentes, o que convenhamos, é um probleminha de segurança.
Muito Obrigado!!!!! Era só isso que eu precisava, estava revirando a internet inteira e não achava. Quatro anos depois e ainda salvando vidas kkkkk,. Obrigadooo.
para solucionar os caracteres indesejados ao fim do programa, ao inves de [i-1] podemos alterar a condição do while colocando (caractere != '\0'), assim não precisamos alterar o valor do tamanho da linha, deixando linha [ i ].
Dessa vez nessa aula não bugou, está ok, nem precisei digitar em baixo do while linha[i-1]='\0', porque no gcc deu certo e no seu dev que é desse jeito, mais mesmo digitando dá certo.
O "caractere" é necessário por causa do ciclo While. senão a repetição não acaba porque quando você da enter é adicionado ++i passando a não ser ' ' mas '\0'
Ola, eu tenho acompanhado as aulas e tenho aprendido muito aqui. Mais estou com um problema, vou ate uzar o exemplo da aula, depois que eu uzo algum scanf no programa, ele ignora completamente o getchar ( to uzando o dev c++ e o code::blocks). #include main(){ char linha [100]; char caractere; int i=0,a; scanf("%i", &a); /* adicionei esse scanf aqui so para testar, e se eu escrever um numero, e der enter o programa termina e nao le do caractere=getchar() em diante (nem o printf la de baixo), mais se eu escrever um nome por exemplo ele captura a string normalmente e tipo que ignora o scanf*/ do{ caractere = getchar(); linha[i] = caractere; ++i; } while (caractere != ' '); linha [i-1] = '\0'; printf("%s ",linha); system("pause"); return 0; }
assim fica tudo mais fácil !!! #include #include int main(){ char palavra[50]; printf("DIGITE SEU NOME: "); gets(palavra); printf(" O NOME DIGITADO FOI >> %s
#include #include int main(void){ char linha[100]; char caractere; int i=0; do{ caractere=getchar();//Getchar funcao padrao da linguagem c linha[i]=caractere; ++i; // ela vai na linha de comando e pega 1 caractere }while(caractere!=' '); ++i; printf("%s ",linha); system("pause"); return 0; } Pode ser assim também ?
Fiz sem o Do while e funcionou perfeitamente também: #include int main() { char phrase[100]; char word; int i = 0; while(word != ' '){ word = getchar(); phrase[i] = word; ++i; } printf("%s ",phrase); return 0; }
Tenho uma dúvida, dentro de um vetor do tipo char eu posso colocar apenas 1 caractere índice do Vetor ou posso por palavras? Exemplo: Char X[10]; X[0] = "pao com mortadela";
Eu utilizo outro método que acho bem mais fácil. Ex: main () { char nome[50]; printf("Digite seu nome completo. ==>"); fflush(stdin); gets(nome); // Ou também poderia ser usado da seguinte maneira: fgets(nome, 50, stdin); printf("Seu nome completo e: %s ", nome); }
Usei uma função parecida pra obter string mas preciso converter ela pra s1 e s2 pra usar como argumento para outra função. Sim, estou tentando juntar a matéria desse vídeo com a da aula 51. Pensei em usar algo assim para fazer isso obterString(); strcpy (s1, linha); obterString(); strcpy (s2, linha); Sendo linha o return da função de obter string. Claro que esse pedaço de código não funciona, botei ali pra dar ideia do que preciso fazer. Alguma ideia?
Não sei o por quê, mas testei no meu compilador a dica do Lucas Divíno e não funcionou... deu certo apenas quando eu coloquei o código como o do vídeo...
Nao entendi a necessidade de fazer as atribuições: caractere = getchar( ); linha[i] = caractere; nao podia ter sido feito simplesmente: linha[i] = getchar(); ?? Obrigado!
Amigo se eu quisesse imprimir uma palavra abaixo da outra apos cada espaço ex : digitar : pao com mortadela imprimir : pao com mortadela como faço ? Att;
Eu achei desnecessário esse ciclo do while, desse jeito roda do mesmo jeito: #include #include #include int main(){ char nome[50]; setlocale(LC_ALL,"portuguese"); printf("Digite seu nome: "); gets(nome); printf(" Seu nome é: %s
Aula de 2012 e me ajudou em 2021, PQP. Tive que fazer uma lista encadeada onde o usuário digitava o nome da música, a banda/cantor e a duração. Ele também tinha que ter a opção de digitar mais e depois listar todas a que ele digitou. Consegui fazer tudo até chegar nessa parte de string. Toda vez que eu fazia o printf_s, ou acontecia violação de memória ou exibia uns caracteres ÌÍÌÍÌÍÌÍÌÍÌÍÌÍÌÍ. Me ajudou demais cara, muito obrigado!!!
faço engenharia de computação na ufms e tendo programação... realmente seus vídeos possuem muita qualidade, abraços!!!
Essa aula ajudou e muito em um probleminha que eu estava, valeu e continue assim, nos oferecendo boas oportunidades de desenvolver nossa linha de logica. parabéns!
Esse vídeo mudou minha vida!
Italo, só faltou uma coisa nas aulas sobre entrada de strings, o formatador %[^
], que recebe strings contendo espaço, não precisa fazer o ciclo while, se comporta de forma idêntica ao %s porém reconhece espaços, e para exibir no printf usa o %s mesmo. E aqui, nos scanf em string, quando coloco o & dá erro, para entrada de strings não usa-se o &.
Ex: printf("Insira nome e sobrenome: "); scanf("%[^
]",nome); printf("Seu nome e sobrenome: %s
",nome);
Dps do Luciano do yt esse canal é o mais pika kraio!
Valeu pelo suporte!
O vídeo ajudou bastante! valeu!
Era pra ser uma coisa tão simples, né? E a linguagem C dificulta algo tão banal... adorei sua solução. Deveria ter visto esse video quando eu estava sofrendo com o
escondido do fgets, rs. Meu professor de estrutura de dados pede todo mês relatórios dos videos do seu canal. E eu passei em linguagem de programação por causa desses videos, se não... rs. Parabéns, seu curso de C é muito bom!
Pois é, não entendo o porquê desse
, poderia me explicar?
@@antonioalecioferreira7155 se eu n me engano é pula linha
sim sim.. você tem razão. não me lembro porquê na época fiz desse jeito hahaha..
Também tem o "fgets", uso bastante ele porem há um problema na entrada de dados,
quando você escreve um nome ou uma frase e em seguida você pressiona ENTER, ela pega o enter junto, como se fosse uma letra da frase, no caso '
', mas pode ser resolvido com a função strlen, código em seguida:
#include
#include
int main()
{
char nome[30];
fgets(nome,30, stdin);
nome[strlen(nome)-1]='\0';
printf("%s", nome);
return 0;
}
Oi ítalo , sou novo no seu canal aqui e to curtindo muito apesar da minha dificuldade de assimilação , e entendo bem com vc explicando, pena q quando eu pego no pesado pra programar, da um branco eu esqueço tudo, acho que to dormindo pouco. Parabéns pelo trabalho.
Mas vem cá, o que vc usa pra substituir os comandos system("pause") , system( "cls") e getch() quando necessário no Xcode Mac? To apanhando que dói em cada vez que possui um comando que não roda no Mac e Ródano Windows...
Dessa maneira tudo fica mais simples !!!
#include
#include
int main(){
char palavra[50];
printf("DIGITE SEU NOME: ");
gets(palavra);
printf("
O NOME DIGITADO FOI >> %s
",palavra);
system("pause");
return 0;
}
Sim mano assim é mais fácil, mas ele fez daquela forma ai encima no vídeo, para ensinar a função getchar , e uma dica: a função gets ela não existe mais na ultima padronização que ouve em C, e substituída pela função fgets que faz a mesma coisa de gets e é mais confiavel, no casa do seu codigo ficaria assim:
gets(palavra) // forma menos confiável & que não existe mais na ultima padronização
fgets(palavra, 50, stdin) // Forma Correta & Mais confiavel
Rogerio Cruzz pelo pouco que eu sei, gets n é nem um pouco confiável por conta do Buffer Overflow, o transbordamento de dados. A função gets n limita o usuário a digitar uma quantidade maxima de caracteres, ou seja, ele pode simplesmente escrever 1000000 de caracteres, muito mais que o seu vetorzinho char[20], por exemplo, aguentaria. Dessa forma esses dados sobressalentes seriam alocados em espaços de memória adjacentes, o que convenhamos, é um probleminha de segurança.
Muito Obrigado!!!!! Era só isso que eu precisava, estava revirando a internet inteira e não achava. Quatro anos depois e ainda salvando vidas kkkkk,. Obrigadooo.
@@rogeriocarvalho2248 esse 50 e referente ao que??
@@earthgamers252 Pode ser o tamanho do vetor
para solucionar os caracteres indesejados ao fim do programa, ao inves de [i-1] podemos alterar a condição do while colocando (caractere != '\0'), assim não precisamos alterar o valor do tamanho da linha, deixando linha [ i ].
Dessa vez nessa aula não bugou, está ok, nem precisei digitar em baixo do while linha[i-1]='\0', porque no gcc deu certo e no seu dev que é desse jeito, mais mesmo digitando dá certo.
Você saberia explicar por que quando eu substituo linha[i] = caractere por linha[i] = getchar() o resultado não é o esperado.
O "caractere" é necessário por causa do ciclo While.
senão a repetição não acaba porque quando você da enter é adicionado ++i passando a não ser '
' mas '\0'
Ola, eu tenho acompanhado as aulas e tenho aprendido muito aqui.
Mais estou com um problema, vou ate uzar o exemplo da aula, depois que eu uzo algum scanf no programa, ele ignora completamente o getchar ( to uzando o dev c++ e o code::blocks).
#include
main(){
char linha [100];
char caractere;
int i=0,a;
scanf("%i", &a); /* adicionei esse scanf aqui so para testar, e se eu escrever um numero, e der enter o programa termina e nao le do caractere=getchar() em diante (nem o printf la de baixo), mais se eu escrever um nome por exemplo ele captura a string normalmente e tipo que ignora o scanf*/
do{
caractere = getchar();
linha[i] = caractere;
++i;
} while (caractere != '
');
linha [i-1] = '\0';
printf("%s
",linha);
system("pause");
return 0;
}
assim fica tudo mais fácil !!!
#include
#include
int main(){
char palavra[50];
printf("DIGITE SEU NOME: ");
gets(palavra);
printf("
O NOME DIGITADO FOI >> %s
",palavra);
system("pause");
return 0;
}
Excelente!!!
Acho mais facil fazer
scanf(" %[^
]"); ja evita varios erros de buff e um jeito mais confiável. Esse ciclo while vai aumentar o custo do programa
Você gosta de Mortadela tanto assim??? :v :v :V
Si >:D
Usem:
scanf("%[^
]s"), -nome variavel-;
Vai capturar tudo do teclado até espaços e só para quando apertar ENTER.
#include
#include
int main(void){
char linha[100];
char caractere;
int i=0;
do{
caractere=getchar();//Getchar funcao padrao da linguagem c
linha[i]=caractere;
++i; // ela vai na linha de comando e pega 1 caractere
}while(caractere!='
');
++i;
printf("%s
",linha);
system("pause");
return 0;
}
Pode ser assim também ?
to tentando fazer uma função pesquisa dentro de um arquivo.txt em um projeto mais to com dificuldade como faço ?
Fiz sem o Do while e funcionou perfeitamente também:
#include
int main() {
char phrase[100];
char word;
int i = 0;
while(word != '
'){
word = getchar();
phrase[i] = word;
++i;
}
printf("%s
",phrase);
return 0;
}
sugiro que vc nao coloque os links das aulas anteriores de das proxima aulas bem onde fica a barra de time do youtube
Tenho uma dúvida, dentro de um vetor do tipo char eu posso colocar apenas 1 caractere índice do Vetor ou posso por palavras?
Exemplo:
Char X[10];
X[0] = "pao com mortadela";
🎉
Eu utilizo outro método que acho bem mais fácil.
Ex:
main () {
char nome[50];
printf("Digite seu nome completo.
==>");
fflush(stdin); gets(nome); // Ou também poderia ser usado da seguinte maneira: fgets(nome, 50, stdin);
printf("Seu nome completo e: %s
", nome);
}
Usando uma biblioteca neh! kkkk
Seu nutela!
Tô usando um scanf após o getchar ele está ignorando totalmente o scanf.... como arrumar isso?
Usei uma função parecida pra obter string mas preciso converter ela pra s1 e s2 pra usar como argumento para outra função. Sim, estou tentando juntar a matéria desse vídeo com a da aula 51. Pensei em usar algo assim para fazer isso
obterString();
strcpy (s1, linha);
obterString();
strcpy (s2, linha);
Sendo linha o return da função de obter string. Claro que esse pedaço de código não funciona, botei ali pra dar ideia do que preciso fazer. Alguma ideia?
uso o devec++, e no meu funcionou correto sem a linha que poe o caractere nulo, nao apareceu aquele lixo
Não sei o por quê, mas testei no meu compilador a dica do Lucas Divíno e não funcionou... deu certo apenas quando eu coloquei o código como o do vídeo...
vc pode dizer que char linha[100] = '\0' que o problema tbm resolve
Nao entendi a necessidade de fazer as atribuições:
caractere = getchar( );
linha[i] = caractere;
nao podia ter sido feito simplesmente:
linha[i] = getchar(); ??
Obrigado!
Se ele não tivesse feito o esquema o ciclo não teria acabado, o buffer não adiciona o '
' ao vetor por último
getchar é o mesmo que getche????
Como retornar uma string de uma função para outra?
o Do faz o que ? significa o que ?
Na verdade seria:
linha[i-1]=getchar();
dessa forma não da erro.
Faltou so uma melhor/maior interação com usuário, como podemos melhorar isso?
Amigo se eu quisesse imprimir uma palavra abaixo da outra apos cada espaço
ex : digitar : pao com mortadela
imprimir : pao
com
mortadela
como faço ?
Att;
+Jeferson Oliveira Usaria um ciclo e colocando um
no printf!
Faz um vídeo só comendo o pão com mortadela.
pq o programa recebe a string do usuario sem a função scanf???
Porque existem outras funções que tbm podem receber uma string do usuário, por exemplo: gets.
Alias essa função getchar não pega uma string digitada pelo usuário, mas sim um único caractere.
Eu achei desnecessário esse ciclo do while, desse jeito roda do mesmo jeito:
#include
#include
#include
int main(){
char nome[50];
setlocale(LC_ALL,"portuguese");
printf("Digite seu nome: ");
gets(nome);
printf("
Seu nome é: %s
",nome);
system("pause");
return 0;
}
Estava pensando nisso, é muito mais pratico usar o comando fgets, ou será que vale a pena aprender esse outro comando? O que você acha?
@@marleijava7659 Depende do que o professor pedir, mas na prática, não vai usar
O intuito da aula é ensinar sem usar atalhos, dps ele vai ensinar isso. Um passo de cada vez, meu nobre.
2021?