Ir ao conteúdo
  • Cadastre-se

problemas com c/c++


Visitante

Posts recomendados

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

Link para o comentário
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

Link para o comentário
Compartilhar em outros sites

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!

Link para o comentário
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.

Link para o comentário
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:

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!

Link para o comentário
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'){

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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...