2013-08-14 2 views
0

내 코드를 사용하려면 파일을 열어야합니다. 파일의 첫 번째 줄에는 1과 1000 사이의 2 개의 정수가 포함되어 있습니다. 숫자 2 개를 읽고이 숫자를 사용하여 숫자 (예 : 50,200은 - 배열 [50] [200])에 해당하는 2D 배열을 만들어야합니다. 이 배열을 만든 후에는 파일의 나머지 부분을 읽고 데이터를 저장해야합니다.이 데이터는 두 개의 숫자로 이루어진 눈금에 설정되어 있습니다.C에서 파일의 2 정수를 읽는 것

이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 나는 getline을 한 다음 for 루프를 수행하여 chars를 행 다음 열로 추가 한 다음 int로 변환하지만 내 컴파일러는 오류가 계속 발생한다고 생각했습니다.

+0

오류를 생성하는 데 사용한 코드를 제공 할 수 있습니까? 이 방법에는 여러 가지가 있으며 문제에 대한 접근 방식을 볼 수 없도록 안내하는 것이 가장 좋습니다. –

+0

내가 좌절 한 것처럼 나는 그것을 삭제했다. 나는 이것을하기위한 좋은 방법인지 아니면 정말로 간단한 방법을 간과하고 있는지 궁금한가요? –

+0

다음과 같은 일반적인 접근 방식을 제공했습니다. 여전히 코드가 제공된다면 정확한 접근 방식에 맞게 조정할 수 있습니다. 나는 그것이 당신에게 약간의 사용이 될 수 있기를 바랍니다. –

답변

0

파일은 바이너리 또는 텍스트입니까? 바이너리 인 경우 fread를 사용하면 raw 바이트를 쉽게 읽을 수 있습니다. 그 텍스트가

+0

텍스트의 첫 번째 줄은 2 개의 정수이고 나머지는 다음과 같이 구성됩니다./\ = –

+0

fscanf가 완벽하게 작동했습니다. 감사합니다. –

0

fscanf 사용하는 경우 입력을 가정하면 항상 이 양식의 (약간 불분명)입니다 :

2,4 
aaaa 
b b 

은 ... 다음 접근 방식이 행렬의 차원에서 읽을 것 (수 행 수, 열 수)를 한 번에 한 문자 씩 읽으면됩니다. 그것은이는 다음과 같다 :

int rows = getchar(); 

// Skip ','. 
getchar(); 

int cols = getchar(); 

int arr[ rows ][ cols ]; 
int r = 0; 
int c = 0; 

for (int byte = getchar(); byte != EOF; byte = getchar(), c++) { 
    if (c == cols) { 
    c = 0; 
    r++; 
    } 

    arr[ r ][ c ] = byte; 
} 

... 다음과 같이 당신은 당신의 프로그램에 파이프로 입력 파일을 필요 : 이것은에 맞게 조정됩니다 :

./program.out < input.txt 

특정 문제가 설정되면 입력이 전체 배열을 채울 수있는 보장이 없거나 입력 크기가 잘못되었거나 크기가 초과 된 경우 등 (많은 문제) - 이러한 문제를 고려해야합니다. .

관련 문제