1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

duvida com fscanf...

Discussão em 'Programação' iniciada por nobita6, 9 de Abril de 2009. (Respostas: 13; Visualizações: 1063)

  1. Boas,
    estou a fazer um programa em c no qual tenho de ler de um ficheiro certas informações, e para tal estou a utilizar a função fscanf, o meu ficheiro é do tipo por exemplo:

    23
    hugo Leal
    [email protected]

    e para apanhar as parametros do ficheiro estou a utilizar a funçao fscanf do seguite modo:

    while(fscanf(fp," %d %s %s",&d,s,s1)!=EOF),

    e ele guarda o nome "hugo" e "leal" em strings diferentes, mas eu gostava de guardar na mesma string pois depois vou querer guardar essa string do nome numa estrutura, mas assim como são duas string torna-se mais complicado... :s
     
  2. Baderous

    Baderous Banido

    Penso que o melhor é usares a função fgets.
     
  3. mas a função fgets guarda tudp numa unica string e isso tambem não me ajuda...:s
     
  4. AliFromCairo

    AliFromCairo Power Member

    Boas, caso seja possível, coloca aqui o formato exacto do ficheiro de input. Digo isto porque a partir do exemplo que colocaste, os dados aparentam estar dispersos por vários linhas, mas pelo fscanf que aí colocaste, parece que afinal estão todos na mesma linha. Se asssim for, podes utilizar uma (espécie de) expressão regular, uma vez que tens um espaço entre os nomes. É complicado ajudar mais sem mais detalhes, nomeadamente, se o nome tem sempre esse formato, i.e., "Nome Apelido".
     
  5. Baderous

    Baderous Banido

    Primeiro queixas-te que grava em strings diferentes, agora queixas-te que grava numa só string, afinal o que queres?
     
  6. Isso resolve-se com o auxílio da função strtok.
    Se mm assim n quiseres usar o fgets, podes usar o strcat para juntares duas strings.
     
  7. Os dados estão colocados em linhas diferentes e esse fscanf está a apanha-los, relativamente aos nome esse é que é o meu problema é que o nome tanto pode ser caracterizado pois 2 nome ou por 3 ou por 4... se fosse so 2 era so juntar as duas strings... mas como eu não sei por quantos nomes esta caracterizado não sei se as posso juntar ou não, apenas sei que o nome esta todo contido naquela linha...
    Relativamente ao fgets eu pensava que isso ia colocar o numero junto com o nome etc... mas ja vi que não por isso vou tentar desenvolver por ai...
     
  8. AliFromCairo

    AliFromCairo Power Member

    Sim, nesse caso o fgets talvez seja a função mais adequada. Podes converter de string para int utilizando a função atoi.
     
  9. ok,
    obrigado pela ajuda!!
     
  10. Alguem sabe porque é que quando eu tou a converter o numero que apanho com a função gets, neste caso o 23 com a função atoi o compilador da erro, mas se fizer um strcpy para outra variavel ja não da erro quando uso a função atoi??????? :s
     
  11. Baderous

    Baderous Banido

    Que erro é que dá? Se puderes, coloca aqui o código para a gente ver.
     
  12. "O programa.exe encontrou um problema e vai ser encerrado. Lamentamos qualquer inconveniente que isto lhe possa causar."
    como eu tou a usar o devc++ depois a janela de executar fecha, mas e um pouco esquisito pois se eu colocar uma posição da string na fução atoi e depois a atribuir a uma variavel da esse erro, mas se eu colocar a string toda ja não, e não é preciso utilizar o strcpy...
     
  13. Baderous

    Baderous Banido

    Isso deve ser um segmentation fault. Mas estás a dizer que estás a passar apenas uma posição da string à função atoi? É suposto passares a string toda...
     
  14. Sim,mas eu pensava que se tinha de passar posição a posição, mas obrigado pelas ajudas ja ta tudo a correr em pleno...
    Mas acho estranho aquilo dar erro se se passar uma posição da string é que eu tenho um programa no livro e eles passam la apenas uma posição de uma string que é para conseguirem somar todos os lementos da string, não sei porque é que a mim me estava a dar erro...
    Mas obrigadão pela ajuda...
     

Partilhar esta Página