Ir ao conteúdo
  • Cadastre-se
Visitante

problemas com c/c++

Posts recomendados

Visitante

pessoal, estou começando a ver c/c++ e gostaria de saber 2 coisas...

tipo, eu preciso fazer um programa que leia um arquivo ".txt", que no caso teria informações do tipo:

5 7 10 9 11 12

18 19 12 2 1 13

25 22 34 17 12 15

1 2 51 4 9 3

12 89 87 56 2

9 7 45 12 1 0

(vários vetores)

e organize-os em ordem crescente

a parte do algoritmo para organizar já esta feito... ^^

meu problemas são:

1- como fazer para "ler" um arquivo ".txt" (ou qualquer outro arquivo)

2- como converter esse texto que estará no arquivo, em uma matriz (ou vetores, levando em consideração que após cada número há uma espaço separando ele do próximo - ai surge uma terceira dúvida de como saber que o vetor terminou... :))

quem puder me dar uma ajuda aí... ^^

grato desde já... :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em para trabalhar com arquivos você utiliza a seguinte função:

fopen

os parâmetros desas função são o nome do arquivo texto e o que você deseja fazer, ler ou escrever, que é o que você precisa (no caso acho que só ler)

colocando r no segundo argumento você diz que vai ler o arquivo.

colocando w que você vai inserir algo nele.

FILE *arquivo;arquivo = fopen("arquivo.txt","r");

Utilize um while para ler todo o arquivo ;)

http://www.mtm.ufsc.br/~azeredo/cursoC/aulas/c960.html

Utilize como referência esse link

Para tirar os espaços compare sempre com o que for lido (já que ele vai caractere por caractere) e grave ou não na sua variável.

Se ainda tiver alguma duvida, poste aí

Att

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  •    1
    Visitante

    valeu pela ajuda cara... deu pra entender bem esse esquema de ler/escrever arquivo... ^_^

    mas ainda me surgiram algumas dúvidas...

    no caso, como eu terei que analisar caracter por caracter, eu terei que armazenar os números encontrados antes de espaços em uma string? (pra poder concatena-los)

    se caso a resposta for sim, como eu transformaria essa string em uma int? o.O

    como eu identifico os espaços e término de linhas?

    o espaço creio eu que seja:

    if (caracter == " "){ //me corrijam se estiver errado...
    ...
    }

    agora término de linha ficou meio complicado... :confused:

    por enquanto essas são minhas (novas) dúvidas... \o/

    valeu de novo pela atenção pessoal!

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Usando o 'while' que o miltonlp comentou, ele armazenará cada 'char' na variável 'c'. A partir daí é ir concatenando em um array de char. Quando encontrar um espaço ( c == ' ' ) ou quebra de linha ( c == '\n' ), você pega o conteúdo desse array, usa a função 'atoi()' que irá converter para um 'int', armazenar em uma matriz e volta para a leitura do arquivo, procurando o próximo número. Fazer esse processo até o final do arquivo.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  •    1
    Visitante

    valeu pela ajuda pessoal.... ^_^

    mas ainda estou com problemas aqui... =/

    mas creio eu que esteja acabando... xD

    fui compilar e deu problema nesses dois while's

    while (c != "\n"){
    while (c != " "){

    em ambos aparece a mensagem:

    ISO C++ forbids comparison between pointer and integer

    pelo que eu entendi, não é possível fazer uma comparação entre eles... certo?

    no começo do código eu defini o "c" como um char...

    eu mudei o código e coloquei o código abaixo ao invés dos while's (o que tornou o código bem mais simples.. xD), mas deu o mesmo problema.... =/

    if (c == " "){
    ...
    if (c == "\n"){

    seria alguma biblioteca específica que está faltando? usei apenas o iostream

    valeu!

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    valeu pela ajuda pessoal.... ^_^

    mas ainda estou com problemas aqui... =/

    mas creio eu que esteja acabando... xD

    fui compilar e deu problema nesses dois while's

    while (c != "\n"){
    while (c != " "){

    em ambos aparece a mensagem:

    pelo que eu entendi, não é possível fazer uma comparação entre eles... certo?

    no começo do código eu defini o "c" como um char...

    eu mudei o código e coloquei o código abaixo ao invés dos while's (o que tornou o código bem mais simples.. xD), mas deu o mesmo problema.... =/

    if (c == " "){
    ...
    if (c == "\n"){

    seria alguma biblioteca específica que está faltando? usei apenas o iostream

    valeu!

    Se você está tentando comparar strings não é assim que isto é feito (usando os operadores == ou !=). Existem funções/métodos para isso.

    Em C++, usando a classe std::string existe o método compare():

    http://www.cplusplus.com/reference/string/string/compare/

    Em C existe a função strlen(), a ser utilizada em strings formadas por array de chars (char*):

    http://www.cplusplus.com/reference/clibrary/cstring/strlen/

    Agora, se você está tentando comparar caracteres (que é o que parece), você pode sim utilizar os operadores == e !=, porém caracteres são representados com aspas simples ('), e não aspas duplas ("). Seu código ficaria assim:


    if (c == ' '){
    ...
    if (c == '\n'){

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário

    Criar uma conta

    Crie uma nova conta em nossa comunidade. É fácil!

    Crie uma nova conta

    Entrar

    Já tem uma conta? Faça o login.

    Entrar agora





    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

    Direitos autorais

    Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

    ×
    ×
    • Criar novo...

    GRÁTIS: minicurso “Como ganhar dinheiro montando computadores”

    Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

    Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

    Inscreva-se agora!