Enviado em 16/03/2017 - 22:02h
Eae pessoal, estava fazendo um algoritmo pra ler os dados de um arquivo separado por vírgula, passar esses dados para uma matriz do tipo float para poder realizar contas com os dados do arquivo. Então usei a função fgets pra pegar cada linha e percorre-la de virgula em virgula, salvando os valores em uma variável (char) e depois convertendo essa variável para uma outra variável tipo float, mas a função atof() está modificando alguns valores na hora da conversão. Exemplo:#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<locale.h>
#include<string.h>
float** alocamatriz(float **m, int l, int c){
int cont;
m=(float**)malloc(sizeof(float*)*l);
for(cont=0;cont<l;cont++){
m[cont]=(float*)malloc(sizeof(float)*c);
}
return m;
}
int main(){
FILE *arq,*arquivo;
char vetor[5000],*valor,*valor2,vetor2[5000];
float **m,ventomedio,soma=0,aux=-999.989990,vento,v,z;
int l=0,c=0,cont,linha=0,coluna;
//Leitura do coeficiente
printf("Digite o valor de z:");
scanf("%f",&z);
//Abertura do arquivo
arq = fopen("Dados.txt","rt");
if(arq==NULL){
printf("Erro na abertura do arquivo!\n");
exit(0);
}
//Verificação do arquivo para saber o numero de linhas e colunas(Necessario na alocação da matriz)
while (fgets(vetor, sizeof(vetor), arq)){
valor = strtok(vetor,",");
while (valor != NULL){
valor = strtok(NULL, ",");
if(l==0){
c++;
}
}
l++;
}
//Alocação da matriz
m=alocamatriz(m,l,c);
fclose(arq);
//Reabertura do arquivo
arq = fopen("Dados.txt","rt");
if(arq==NULL){
printf("Erro na abertura do arquivo!\n");
exit(0);
}
//Passagem dos dados do arquivo para a matriz
while (fgets(vetor2, sizeof(vetor2), arq)){
valor2=strtok(vetor2, ",");
if(linha!=0){
m[linha][0]=atof(valor2);
}
coluna=1;
while (valor2 != NULL){
valor2 = strtok(NULL, ",");
if(linha!=0){
m[linha][coluna]=atof(valor2); //Revisar essa função
}
coluna++;
}
linha++;
}
// Calculo do vento medio, raiz(u^2+v^2)
for(linha=1;linha<l;linha++){
if(m[linha][8]!=aux && m[linha][9]!=aux){
vento=sqrt(pow(m[linha][8],2)+pow(m[linha][9],2)); // raiz de u^2+v^2
soma=soma+vento;
}
}
//Vento medio na altura de 3 metros
ventomedio=soma/(l-1);
//Cria o arquivo onde sera salvo o resultado
arquivo=fopen("Resultado.txt","wt");
//Simulações
for(cont=10;cont<=100;cont=cont+10){
v=ventomedio*(log(3/z)/log(cont/z));
fprintf(arquivo,"Vento medio a Altura de %dm: %f\n ",cont,v);
}
//Fecha os arquivos
fclose(arq);
fclose(arquivo);
system("pause");
return 0;
}
Atenção a quem posta conteúdo de dicas, scripts e tal (1)
Manutenção de sistemas Linux Debian e derivados com apt-get, apt, aptitude e dpkg
Melhorando o tempo de boot do Fedora e outras distribuições
Como instalar as extensões Dash To Dock e Hide Top Bar no Gnome 45/46
Como Atualizar Fedora 39 para 40
Instalar Google Chrome no Debian e derivados
Consertando o erro do Sushi e Wayland no Opensuse Leap 15
Instalar a última versão do PostgreSQL no Lunix mantendo atualizado
Flathub na sua distribuição Linux e comandos básicos de gerenciamento
ASRock H310CM-HG4 vs Linux (9)
Como configuro o controle no emulador mupen64 (3)