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

n3lThon

[Resolvido]Erro com scanf

19 mensagens neste tópico

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

isso vai fazer scanf's eternamente, não percebo pq está dentro dum ciclo infinito...

fica parado pq está sempre à espera de receber uma string do stdin...

qual é o objectivo do que estás a fazer?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

hmmm, nesse caso não estou a perceber...

que erro dá?

mete aí o código original, fica mais facil de analizar... o código que puseste em cima não faz nada, mas está correto, não deve dar erro nenhum...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

seria:

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

desculpa pela confusão! :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

nata qual a diferença entre

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

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

podes me explicar? agora fiquei curioso...... :-[

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora