2016-10-12 2 views
-1

에 float 배열에 번호를 떠있는 텍스트 파일 읽기 방법 : 텍스트 파일에 위의 형식으로나는 다음과 같이 텍스트 파일을 읽기 위해 노력 해왔다 C

0.000 1.800 3.240 4.374 5.249 5.905 6.377 7.696 6.887 6.974 6.974 6.904 6.778 6.609 6.406 6.177 5.930 5.670 5.403 5.133 4.863 4.596 4.333 5.077 3.829 4.589 3.360 3.140 2.931 2.732 2.543 2.365 2.198 2.040 1.891 1.752 1.622 1.500 1.387 1.281 1.182 1.091 2.006 0.927 0.853 0.786 0.723 0.665 0.611 0.561 0.515 0.473 0.434 0.398 0.365 0.335 0.307 0.281 0.257 0.236 0.216 1.197 0.180 0.165 0.151 0.138 0.126 0.115 0.105 0.096 0.088 0.080 0.073 0.067 0.061 1.055 0.051 0.046 0.042 0.038 0.035 0.032 0.029 0.026 0.024 0.022 0.020 0.018 0.017 0.015 0.014 0.012 0.011 0.010 0.009 0.009 0.008 0.007 1.006 0.006 0.005 0.005 

이 번호가 있습니다. printf의 출력은 실행시 정수의 모든 요소는 제로 점이다

#include <stdio.h> 

#include <stdlib.h> 

void main() 

{ 

     FILE *file = fopen("Data.txt", "r"); 
     float integers[102]; 

     int i=0; 
     int num; 
     while(fscanf(file, "%f", &num) >0) { 
      integers[i] = num; 
      i++; 
     } 
     if(file == NULL) 
     { 
      printf("Error while opening the file.\n"); 

     } 
     fclose(file); 
     for(i = 0;i <102; i++){ 
     printf("integers[%d] = %f",i, integers[i]); 
     } 


} 

다음과 같이

내 코드이다. 또한 디버깅 할 때 컴파일러는 while 루프를 건너 뜁니다. Code Composer Studios를 사용하고 있습니다. 내 머리 위로 떨어져

+2

왜 float 배열을 "정수"라고 부릅니까? 왜 읽은 정수를'float'가 아니라'int'에 저장합니까? 아주 늦은 시간에 'null'을 왜 확인합니까? – Zeta

+0

'fopen'가'NULL'을 반환하면 테스트를 시작하고, 그렇다면 오류 메시지를 출력하고 더 이상 가지 않습니다. –

+0

@Zeta 코드가 원래 코드가 아니므로 코드를 수정하여 수레를 읽어야했습니다. 변수는 원본에서 변경되지 않았습니다. –

답변

1

:

fval[0]=0.000000 
fval[1]=1.800000 
fval[2]=3.240000 
fval[3]=4.374000 
fval[4]=5.249000 
fval[5]=5.905000 
fval[6]=6.377000 
fval[7]=7.696000 
,691 :

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

int main() { 
    FILE * fp; 
    float fval[102]; 
    int n, i; 

    fp = fopen("foo.txt", "w+"); 
    if (fp == NULL) { 
    printf("failed to open file\n"); 
    return 1; 
    } 

    fputs("0.000 1.800 3.240 4.374 5.249 5.905 6.377 7.696 ", fp); 
    rewind(fp); 

    n = 0; 
    while (fscanf(fp, "%f", &fval[n++]) != EOF) 
    ; 

    /* n-1 float values were successfully read */ 
    for (i=0; i<n-1; i++) 
    printf("fval[%d]=%f\n", i, fval[i]); 

    fclose(fp); 
    return 0; 
} 

나는이 출력을 얻을

+0

이 (가) 수행 된 것 같습니다. foo 텍스트 파일을 보지 못했습니다. 데이터 텍스트 파일 (BTW 데이터는 matlab에서 온), 그것을 검색했습니다. 그것이 다른 파일에 있다는 것을 발견했습니다. 파일이 데이터 텍스트 파일과 같은 수준에 있습니다. foo 텍스트 파일이있는 데이터 텍스트 파일 이동 문제가 해결되었습니다. 당신은 생명의 은인입니다. 많이 감사합니다. –

+0

방금 ​​배열을 사용하여 수행하는 작업에 좀 더 간결하고 가깝도록 코드를 수정했습니다. 다행히 도왔다! –

1

//int num; 
    float num; // should be float isn't is 
    while(fscanf(file, "%f", &num) >0) { 

보다이 방법은 예로서 작동

int main() // int main instead of void 
{ 
    /* All declarations at one place */ 
    FILE *file = NULL; 
    float integers[102], num ; 
    int i = 0; 
    /* Try Open and exit if there is problem */ 
    file = fopen("Data.txt", "r"); 
    if(file == NULL) { 
     printf("Error while opening the file.\n"); 
     return -1; 
    } 
    /* Read and store EOF is always better */ 
    while(fscanf(file, "%f", &num) != EOF) { 
     integers[i++] = num; 
    } 
    /* Done with File Close it */ 
    fclose(file); 
    /* Final Prints */ 
    for(i = 0; i < 102; i++){ 
     printf("integers[%d] = %.02f\n",i, integers[i]); 
    } 
    /* All success at this point */ 
    return 0; 
} 
+0

그 점을 지적 해 주셔서 고맙습니다. 문제가 여전히 각 요소에 0이 붙은 배열 문제가 있습니다. –

+0

@OscarTovar 질문 편집을 롤백했습니다. 다음과 같은 방식으로 질문을 편집해서는 안됩니다. – hyde

+0

@hyde 죄송합니다 .BTW이 스레드를 어떻게 닫으시면 문제가 해결되었는지 –

-2

벡터를 사용하면 문제를 해결할 수 있습니다. 아래 프로그램을 참조하십시오. 여기 myValues는 2D 배열입니다.

ifstream input ("Data.txt"); 벡터 myValues;

for (float num; input >> num;) myValues.push_back (num);

또는

ifstream 입력 ("MY-file.txt를"); std :: vector myValues;

for (float f; input >> f;) myValues.push_back (f);

+1

이것은 C 질문이 아니라 C++입니다. – hyde

관련 문제