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 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.
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";
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.
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
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'
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; }
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?
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 ].
#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 ?
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...
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); }
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!
sim sim.. você tem razão. não me lembro porquê na época fiz desse jeito hahaha..
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);
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
Dps do Luciano do yt esse canal é o mais pika kraio!
Valeu pelo suporte!
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;
}
O vídeo ajudou bastante! valeu!
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 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.
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";
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
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!!!
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'
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;
}
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?
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 ].
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 ?
sugiro que vc nao coloque os links das aulas anteriores de das proxima aulas bem onde fica a barra de time do youtube
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
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...
to tentando fazer uma função pesquisa dentro de um arquivo.txt em um projeto mais to com dificuldade como faço ?
Tô usando um scanf após o getchar ele está ignorando totalmente o scanf.... como arrumar isso?
Você gosta de Mortadela tanto assim??? :v :v :V
Si >:D
getchar é o mesmo que getche????
vc pode dizer que char linha[100] = '\0' que o problema tbm resolve
uso o devec++, e no meu funcionou correto sem a linha que poe o caractere nulo, nao apareceu aquele lixo
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!
o Do faz o que ? significa o que ?
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
Como retornar uma string de uma função para outra?
🎉
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!
Na verdade seria:
linha[i-1]=getchar();
dessa forma não da erro.
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.
Faz um vídeo só comendo o pão com mortadela.
2021?
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.