2017-12-01 3 views
2

txt 파일에서 변수를 읽으려고합니다. 처럼이 .txt 파일은 :txt 파일에서 읽기 전용 값

john 10 
mark 230 
peter 1 

I [1] = (230) 등의 이름으로 신경 쓰는 일없이 예 어레이 [0] = 10, 배열, 전송 및 배열이 값을 저장할 것이다. 나는 아래에있는 내 코드를 붙여 나는 당신이 전혀 fgetc()를 사용해서는 안

int conf[4], i = 0, c; 
FILE *file_conf; 
file_conf = fopen("conf.txt", "r"); 

if(file_conf == NULL){ 
    fprintf(stderr, "Error\n"); 
    exit(EXIT_FAILURE); 
} else { 
    while((c = fgetc(file_conf)) != EOF) { 
     fscanf(file_conf, "%d", &conf[i]); 
     printf("%d\n", conf[i]); 
     i++; 
    } 
} 

답변

1

아래에이 코드를 사용하여 편집 할 수있는 방법을 알고 싶습니다 - 단일 문자를 얻을 수있다. 대신,이처럼 fscanf(), 뭔가 이름 형식을 추가 : 당신은 할당을 억제 *scanf() 가족 변환 지정자를 앞에 수

char name[100]; 
fscanf(file_conf, "%s %d", name, &conf[i]); 
1

. 게시 된 코드에서 fscanf()에서 반환 된 값을 확인하지 않으면 형식이 잘못된 입력에 문제가 발생할 수 있습니다. 또한 배열 인덱스 i이 너무 커져 버퍼 오버플로를 피할 때 입력 루프가 종료되어야합니다.

10 
230 
1 
:

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

int main(void) 
{ 
    int conf[4], i = 0; 
    FILE *file_conf; 
    file_conf = fopen("conf.txt", "r"); 

    if(file_conf == NULL){ 
     fprintf(stderr, "Error\n"); 
     exit(EXIT_FAILURE); 
    } else { 
     while(i < 4 && fscanf(file_conf, "%*s%d", &conf[i]) == 1) { 
      printf("%d\n", conf[i]); 
      i++; 
     } 
    } 

    fclose(file_conf); 

    return 0; 
} 

출력이 게시 된 샘플 입력을 사용하여 다음 코드는 i가 너무 큰 경우, 또는 잘못된 입력이 발견 될 때 루프를 종료