Logo Hardware.com.br
herisson.chaves
herisson.cha... Novo Membro Registrado
4 Mensagens 4 Curtidas

Linguagem C - problema na leitura de string

#1 Por herisson.cha... 26/01/2017 - 23:07
Oi, pessoal. Eu criei um programa que lê um arquivo txt contendo o número de habitantes com o nome da cidades. O programa lê os dados contidos no txt e verifica qual possui o maior habitante, depois o programa gera um arquivo de saída com o nome da cidade mais populosa seguida pelo seu número de habitantes.
O problema é que o programa tá escrevendo no arquivo de saída o nome da cidade com os nomes misturados, já o numero de habitantes está saindo correto. Gostaria de saber o porquê ta ocorrendo esse erro.
Deste já agradeço big_green.png
arquivo de texto:
cidade.txt:


958545 são luis
12040000 são paulo
6320000 rio de janeiro


e a saída tá saindo assim:

A cidade mais populosa é :
são paulorio de janeiro com nº de habitantes = 12040000

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

int main(int argc, char const *argv[])
{
char str1[30],str2[30],cidades[40][10];
int n=0,i=0,habitantes[10],j,status=0;


printf("Digite o nome do arquivo de entrada: &quot;
scanf("%s",str1);
printf("Digite o nome do arquivo de saida: " );
scanf("%s",str2);
FILE *arquivo;
arquivo = fopen(str1,"r&quot;
if(arquivo == NULL)
{
printf("O arquivo não encontrado ou não pode ser aberto\n&quot;
exit(1);
}
while (!feof(arquivo))
{
fscanf(arquivo,"%d\t %[^\n]s",&habitantes[i],cidades[i]);

i++;
n++;

}
// laço para verifica qual vetor possui o maior numero entre os demais
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(habitantes[i]>habitantes[j])
{
if(j== (n-1))
status = 1; // encerra os dois laços
}
else if (habitantes[i]==habitantes[j])
{

continue;
}
else
break;
}
if (status)
break;
}

fclose(arquivo);

if (!(arquivo = fopen(str2,"w&quot)) // Caso ocorra algum erro na abertura
{
printf("Erro! Impossivel abrir o arquivo!\n&quot;
}

else
fprintf(arquivo,"A cidade mais populosa é : \n%s com nº de habitantes = %d \n",cidades[i],habitantes[i]);
fclose(arquivo);
return 0;
}
esquiloesperto
esquiloesper... Cyber Highlander Moderador
7.1K Mensagens 2.2K Curtidas
#2 Por esquiloesper...
28/01/2017 - 01:01
Olá, e seja bem-vindo à Comunidade.

O seu único erro foi na declaração da variável "cidades".

Mas já ouviste falar em Lógica de Programação? - Pois saiba que ela é mais importante do que conhecer bem a linguagem. Veja o quanto ela pode simplificar o seu programa:[code=c]#include
#include

int main () {

char str1[30], str2[30], cidades[10][40];
int i=0, j=0, n=0, habitantes[10];

printf ("Digite o nome do arquivo de entrada: ");
scanf ("%s", str1);
printf ("Digite o nome do arquivo de saida: " );
scanf ("%s", str2);

FILE *arquivo;
arquivo = fopen (str1, "r");

if (arquivo == NULL) {
printf ("O arquivo não encontrado ou não pode ser aberto\n");
exit(1);
}

while ( !feof(arquivo) ) {
fscanf ( arquivo,"%d %[^\n]s", &habitantes[n], cidades[n] );
n++;
}

--n;
fclose (arquivo);

// identifica o maior numero entre os demais
for (j=1; j if ( habitantes[j] > habitantes[i] ) i = j;

if ( !(arquivo = fopen (str2,"w") ) ) // Caso ocorra algum erro na abertura
printf ( "Erro! Impossivel abrir o arquivo!\n" );
else
fprintf ( arquivo, "A cidade mais populosa é : \n%s com nº de habitantes = %d \n", cidades[i], habitantes[i] );

fclose (arquivo);
return 0;
}[/code]Saída:

A cidade mais populosa é :
são paulo com nº de habitantes = 12040000


- E tenha uma boa jornada em programação.
...
Só é difícil enquanto estiver oculto! cool.png
Use a pesquisa


rolleyes.png  Navegar é preciso, viver... também.  smile.png
lipman
lipman Tô em todas Registrado
567 Mensagens 216 Curtidas
#4 Por lipman
29/01/2017 - 20:09
esquiloesperto disse:
Olá, e seja bem-vindo à Comunidade.

O seu único erro foi na declaração da variável "cidades".

Mas já ouviste falar em Lógica de Programação? - Pois saiba que ela é mais importante do que conhecer bem a linguagem. Veja o quanto ela pode simplificar o seu programa:[code=c]#include
#include

int main () {

char str1[30], str2[30], cidades[10][40];
int i=0, j=0, n=0, habitantes[10];

printf ("Digite o nome do arquivo de entrada: ");
scanf ("%s", str1);
printf ("Digite o nome do arquivo de saida: " );
scanf ("%s", str2);

FILE *arquivo;
arquivo = fopen (str1, "r");

if (arquivo == NULL) {
printf ("O arquivo não encontrado ou não pode ser aberto\n");
exit(1);
}

while ( !feof(arquivo) ) {
fscanf ( arquivo,"%d %[^\n]s", &habitantes[n], cidades[n] );
n++;
}

--n;
fclose (arquivo);

// identifica o maior numero entre os demais
for (j=1; j if ( habitantes[j] > habitantes[i] ) i = j;

if ( !(arquivo = fopen (str2,"w") ) ) // Caso ocorra algum erro na abertura
printf ( "Erro! Impossivel abrir o arquivo!\n" );
else
fprintf ( arquivo, "A cidade mais populosa é : \n%s com nº de habitantes = %d \n", cidades[i], habitantes[i] );

fclose (arquivo);
return 0;
}[/code]Saída:

A cidade mais populosa é :
são paulo com nº de habitantes = 12040000


- E tenha uma boa jornada em programação.
...

@esquiloesperto...
não estou lhe corrigindo não!
apenas um comentario...
parece esta faltando uns & no scanf...
abraços!
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal