Programar em C - Obter String do usuário | Função getchar - Aula 53

แชร์
ฝัง
  • เผยแพร่เมื่อ 18 ธ.ค. 2024

ความคิดเห็น • 67

  • @UnkNownX73
    @UnkNownX73 3 ปีที่แล้ว +3

    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!!!

  • @gabrielspojump
    @gabrielspojump 7 ปีที่แล้ว +4

    faço engenharia de computação na ufms e tendo programação... realmente seus vídeos possuem muita qualidade, abraços!!!

  • @conectiblockwanderson4307
    @conectiblockwanderson4307 3 ปีที่แล้ว +1

    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!

  •  5 ปีที่แล้ว +1

    Esse vídeo mudou minha vida!

  • @nzrluiz
    @nzrluiz 11 ปีที่แล้ว +5

    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);

  • @cachorroqcomentasobrestali523
    @cachorroqcomentasobrestali523 8 ปีที่แล้ว +9

    Dps do Luciano do yt esse canal é o mais pika kraio!

  • @ESEben10
    @ESEben10 6 ปีที่แล้ว +1

    O vídeo ajudou bastante! valeu!

  • @katialima016
    @katialima016 9 ปีที่แล้ว +6

    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!

    • @antonioalecioferreira7155
      @antonioalecioferreira7155 2 ปีที่แล้ว

      Pois é, não entendo o porquê desse
      , poderia me explicar?

    • @marcoaurelio4424
      @marcoaurelio4424 2 ปีที่แล้ว

      @@antonioalecioferreira7155 se eu n me engano é pula linha

  • @DeAlunoParaAluno
    @DeAlunoParaAluno  11 ปีที่แล้ว +1

    sim sim.. você tem razão. não me lembro porquê na época fiz desse jeito hahaha..

  • @F6GAMEPLAY
    @F6GAMEPLAY 8 ปีที่แล้ว +1

    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;
    }

  • @preto115
    @preto115 10 ปีที่แล้ว +1

    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...

  • @Ilustracaodafe.oficial
    @Ilustracaodafe.oficial 10 ปีที่แล้ว +11

    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;
    }

    • @rogeriocarvalho2248
      @rogeriocarvalho2248 10 ปีที่แล้ว +14

      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

    • @samuelabreu4349
      @samuelabreu4349 7 ปีที่แล้ว +1

      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.

    • @jonatadossantos5464
      @jonatadossantos5464 6 ปีที่แล้ว +1

      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.

    • @earthgamers252
      @earthgamers252 5 ปีที่แล้ว +1

      @@rogeriocarvalho2248 esse 50 e referente ao que??

    • @FranciscoSLM
      @FranciscoSLM 5 ปีที่แล้ว +1

      @@earthgamers252 Pode ser o tamanho do vetor

  • @icarosouza7964
    @icarosouza7964 ปีที่แล้ว

    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 ].

  • @tiagodossantossilva
    @tiagodossantossilva 5 ปีที่แล้ว +1

    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.

  • @matheusdeavilalinsteixeira6668
    @matheusdeavilalinsteixeira6668 8 ปีที่แล้ว +2

    Você saberia explicar por que quando eu substituo linha[i] = caractere por linha[i] = getchar() o resultado não é o esperado.

  • @pedrorodriguesdornellas1337
    @pedrorodriguesdornellas1337 10 ปีที่แล้ว +7

    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'

  • @paulofreire7435
    @paulofreire7435 10 ปีที่แล้ว +1

    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;
    }

    • @Ilustracaodafe.oficial
      @Ilustracaodafe.oficial 10 ปีที่แล้ว +2

      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;
      }

    • @flaviomazocatto
      @flaviomazocatto 10 ปีที่แล้ว

      Excelente!!!

  • @guilhermebrito2548
    @guilhermebrito2548 5 ปีที่แล้ว +1

    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

  • @hybekihyuga4214
    @hybekihyuga4214 7 ปีที่แล้ว +17

    Você gosta de Mortadela tanto assim??? :v :v :V

  • @jailsonathayde74
    @jailsonathayde74 3 ปีที่แล้ว +1

    Usem:
    scanf("%[^
    ]s"), -nome variavel-;
    Vai capturar tudo do teclado até espaços e só para quando apertar ENTER.

  • @alunofaj6602
    @alunofaj6602 9 ปีที่แล้ว +1

    #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 ?

  • @leandrocruz6621
    @leandrocruz6621 6 ปีที่แล้ว

    to tentando fazer uma função pesquisa dentro de um arquivo.txt em um projeto mais to com dificuldade como faço ?

  • @joaoaugustosilvaferreira5599
    @joaoaugustosilvaferreira5599 ปีที่แล้ว

    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;
    }

  • @1000grausantiago
    @1000grausantiago 6 ปีที่แล้ว

    sugiro que vc nao coloque os links das aulas anteriores de das proxima aulas bem onde fica a barra de time do youtube

  • @CasarotteE
    @CasarotteE 6 ปีที่แล้ว

    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";

  • @Adestudos
    @Adestudos 7 หลายเดือนก่อน

    🎉

  • @samuelalmeida9855
    @samuelalmeida9855 8 ปีที่แล้ว +2

    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);
    }

  • @rafaelthomazzi6577
    @rafaelthomazzi6577 7 ปีที่แล้ว

    Tô usando um scanf após o getchar ele está ignorando totalmente o scanf.... como arrumar isso?

  • @CainaCJ
    @CainaCJ 9 ปีที่แล้ว

    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?

  • @manoelrego7196
    @manoelrego7196 6 ปีที่แล้ว

    uso o devec++, e no meu funcionou correto sem a linha que poe o caractere nulo, nao apareceu aquele lixo

  • @brunonogueiradeoliveira6583
    @brunonogueiradeoliveira6583 11 ปีที่แล้ว

    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...

  • @emilioheringer
    @emilioheringer 5 ปีที่แล้ว

    vc pode dizer que char linha[100] = '\0' que o problema tbm resolve

  • @lucasdivino8414
    @lucasdivino8414 11 ปีที่แล้ว +6

    Nao entendi a necessidade de fazer as atribuições:
    caractere = getchar( );
    linha[i] = caractere;
    nao podia ter sido feito simplesmente:
    linha[i] = getchar(); ??
    Obrigado!

    • @thiagofraga1280
      @thiagofraga1280 3 ปีที่แล้ว +2

      Se ele não tivesse feito o esquema o ciclo não teria acabado, o buffer não adiciona o '
      ' ao vetor por último

  • @jeanytorres5273
    @jeanytorres5273 6 ปีที่แล้ว

    getchar é o mesmo que getche????

  • @luizpaulobellumatsouza780
    @luizpaulobellumatsouza780 4 ปีที่แล้ว

    Como retornar uma string de uma função para outra?

  • @22361499
    @22361499 10 ปีที่แล้ว

    o Do faz o que ? significa o que ?

  • @RafaelSantosOficial
    @RafaelSantosOficial 11 ปีที่แล้ว +1

    Na verdade seria:
    linha[i-1]=getchar();
    dessa forma não da erro.

  • @gmartins-dev
    @gmartins-dev 11 ปีที่แล้ว

    Faltou so uma melhor/maior interação com usuário, como podemos melhorar isso?

  • @jefersonoliveira2219
    @jefersonoliveira2219 9 ปีที่แล้ว

    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;

    • @ExtraordinariosBR
      @ExtraordinariosBR 9 ปีที่แล้ว

      +Jeferson Oliveira Usaria um ciclo e colocando um
      no printf!

  • @albertysantos5618
    @albertysantos5618 3 ปีที่แล้ว

    Faz um vídeo só comendo o pão com mortadela.

  • @GustavoFerreira-ql9de
    @GustavoFerreira-ql9de 7 ปีที่แล้ว

    pq o programa recebe a string do usuario sem a função scanf???

    • @paulovinicius9940
      @paulovinicius9940 7 ปีที่แล้ว

      Porque existem outras funções que tbm podem receber uma string do usuário, por exemplo: gets.

    • @paulovinicius9940
      @paulovinicius9940 7 ปีที่แล้ว

      Alias essa função getchar não pega uma string digitada pelo usuário, mas sim um único caractere.

  • @felypeinacio
    @felypeinacio 5 ปีที่แล้ว +1

    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;
    }

    • @marleijava7659
      @marleijava7659 4 ปีที่แล้ว

      Estava pensando nisso, é muito mais pratico usar o comando fgets, ou será que vale a pena aprender esse outro comando? O que você acha?

    • @felypeinacio
      @felypeinacio 4 ปีที่แล้ว

      @@marleijava7659 Depende do que o professor pedir, mas na prática, não vai usar

    • @GabrielSilva-sj2hf
      @GabrielSilva-sj2hf 2 ปีที่แล้ว

      O intuito da aula é ensinar sem usar atalhos, dps ele vai ensinar isso. Um passo de cada vez, meu nobre.

  • @sniss6634
    @sniss6634 3 ปีที่แล้ว

    2021?