Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
n3lThon

[Resolvido]Erro com scanf

Recommended Posts

n3lThon

Estou a fazer um scanf da seguinte maneira dentro de um ciclo e ele dá-me erro, o programa fica parado ali. Mas se for fora de um ciclo funciona correctamente. :/

while(1) scanf("%[^\n]", a);

Esquisito, não?


dreams.each do |dream|

   dream.make_it_happen

end

Share this post


Link to post
Share on other sites
n3lThon

O problema é que o programa não sai dali. Parou com o cursor a piscar.


dreams.each do |dream|

   dream.make_it_happen

end

Share this post


Link to post
Share on other sites
n3lThon

Isso foi só um exemplo. Ele apenas dá erro e não deixa inserir nada (após a primeira inserção) fica apenas com o cursor a piscar como já disse.


dreams.each do |dream|

   dream.make_it_happen

end

Share this post


Link to post
Share on other sites
n3lThon

Neste momento já tá menos mal, já não dá pára mas apenas faz uma vez.

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char a[10][10];
    int x;

    for(x=0;x<10;x++)
    {
        scanf("%[^\n]", a[x]);
    }

    for(x=0;x<10;x++) printf("%s\n", a[x]);
    system("pause");
}


dreams.each do |dream|

   dream.make_it_happen

end

Share this post


Link to post
Share on other sites
nata79

sinceramente, não vejo erro nenhum dentro do ciclo...

o que está mal aí é o printf("%s\n", a);

tas a mandar imprimir uma string e passas um apontador para string, deveria ser por exemplo printf("%s\n", a[0]), para imprimir todas as strings precisas de fazer um ciclo...

já agora, isso deve pelo menos dar um warning ao compilar, certo?

Share this post


Link to post
Share on other sites
n3lThon

Este exemplo foi feito agora para explicar o problema. Nem liguei ao printf, mas sim ao scanf. (Já modifiquei)


dreams.each do |dream|

   dream.make_it_happen

end

Share this post


Link to post
Share on other sites
diiogofernandes

Neste momento já tá menos mal, já não dá pára mas apenas faz uma vez.

    for(x=0;x<10;x++)
    {
        scanf("%c[^\n]", &a[x]);
    }

    for(x=0;x<10;x++) printf("%s\n", a[x]);
    system("pause");
}

falta te ai o c na percentagem do scanf e o & na variável mas penso que o erros está a dar precisamente por faltar o c no scanf testa e penso que já resolve o problema

espero ter ajudado....

Share this post


Link to post
Share on other sites
n3lThon

Já faz mas nunca as 10 vezes e com erros no output. :/

Eu vi como fazer o scanf desta maneira na wiki aqui do forum e diz que para um conjunto de caracteres é: "%[^\n]", se for assim está mal.


dreams.each do |dream|

   dream.make_it_happen

end

Share this post


Link to post
Share on other sites
nata79

falta te ai o c na percentagem do scanf e o & na variável mas penso que o erros está a dar precisamente por faltar o c no scanf testa e penso que já resolve o problema

espero ter ajudado....

parece-me que o objectivo é ler uma string e não um caracter, logo não mete c's nem &'s...

falta limpares o buffer, experimenta

scanf("% [^\n]", a[x]);

ao meteres um espaço depois do '%' o scanf  ignora tudo o que ja estava no buffer.

Share this post


Link to post
Share on other sites
diiogofernandes

sendo assim para um conjunto de caracteres utilizas o %s onde eu disse que era %c

Edit: vi agora que já tinha respondido e só vi agora que era um conjunto de caracteres

Share this post


Link to post
Share on other sites
n3lThon

parece-me que o objectivo é ler uma string e não um caracter, logo não mete c's nem &'s...

falta limpares o buffer, experimenta

scanf("% [^\n]", a[x]);

ao meteres um espaço depois do '%' o scanf  ignora tudo o que ja estava no buffer.

Está-me a dar erro, só faz uma vez e salta o printf.


dreams.each do |dream|

   dream.make_it_happen

end

Share this post


Link to post
Share on other sites
n3lThon

ups, enganei-me, o espaço é antes do '%'

seria:

scanf(" %[^\n]", a[x]);

desculpa pela confusão! :P

Thanks!!

Obrigado a todos pela ajuda. Já tá 5*'s.


dreams.each do |dream|

   dream.make_it_happen

end

Share this post


Link to post
Share on other sites
diiogofernandes

nata qual a diferença entre

scanf(" %[^\n]", a[x]);

  scanf("%c[^\n]", a[x]); 

podes me explicar? agora fiquei curioso...... 😳

Share this post


Link to post
Share on other sites
nata79

n tinha reparado que tinhas posto esse código anteriormente, pareceu-me que só tinha o %c...lol...

quanto à tua duvida, sinceramente, n tenho a certeza do que faz o segundo código, %c[^\n] n axo k seja um argumento válido do scanf, experimentei isso e crashou-se td... axo que ele trata %c[^\n] como sendo apenas %c, pelo menos foi o que me pareceu ao testar... mas n tenho a certeza, tudo o que posso dizer é que n funciona.

o que o meu código faz é ler uma string de caracteres até encontrar o caracter '\n', o espaço antes do '%' serve para limpar o buffer.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.