리디렉션 된 파일에서 행렬을 읽는 행렬 판독기를 읽는 코드를 작성하려고합니다 (FILE 함수는 내 프로그램에서 사용되지 않습니다). 동적으로 작성된 배열 콘솔로 출력하십시오.C 매트릭스를 동적 배열로 읽는 중
중요 배열
. 전체 파일을 읽고 행의 # & 열을 계산하여 동적 (크기가 얻을 수 있다는 의미이다 나는이 두 작업을 수행하는 코드 2 개 가지 방법을 쓰기 시도 잘못된 출력 결과 :
버전 A :
while(ch != EOF) {
ch = fgetc(stdin);
if(ch == ' ') {
fields++;
}
if(ch == '\n') {
rows++;
}
}
버전 B :
를do {
c=getchar();
if(c == ' '){
fields++;
}
} while (c != EOF);
질문이 파일의 LINE, 또는 말의 끝을 명중하지 않는 동안
- 이
while(ch != EOF)
또는while(c=getchar() != EOF)
의미합니까?
나는 위에 표시된 버전 B와 거의 관계가 없었습니다. 테스트 파일에 사용했을 때
10 20 30 40
50 60 70 80
90 10 20 30
40 50 60 70
나는 출력을 얻을 :
50 60 70 80
90 10 20 30
40 50 60 70
70 70 70 70
내가 여기 데 문제가 명중 한 번 내 파일을 읽고 있습니다 때마다 EOF는 루프에서 휴식 것을 생각 , 그리고 나서 파일의 두 번째 줄에 있습니다. 따라서 두 번째 줄에서 출력이 시작되고 마지막 행 번호를 X 번 복사하여 나머지 행을 채 웁니다.
내 목표는 현재 방법으로 달성 할 수 있습니까? 여기 내 코드가 모두 있습니다. 감사합니다.
#include <stdio.h>
#include <stdlib.h>
int main() {
int rows=0;
int fields=1;
int i=0;
int j=0;
int c=0;
char ch = '\0';
/* while(ch != EOF) {
ch = fgetc(stdin);
if(ch == ' ') {
fields++;
}
if(ch == '\n') {
rows++;
}
} */
do {
c=getchar();
if(c == ' '){
fields++;
}
} while (c != 10);
int **array;
array = malloc(fields * sizeof(int *));
if(array == NULL) {
printf("Out of memory\n");
exit(1);
}
for(i = 0; i < fields; i++) {
array[i] = malloc(fields * sizeof(int));
if(array[i] == NULL) {
printf("Out of memory\n");
exit(1);
}
}
for(i = 0; i < fields; i++) {
for(j = 0; j < 4; j++) {
int k;
scanf("%d", &k);
array[i][j] = k;
printf("%d ", k);
}
printf("\n");
}
}
사실 '동안 (c = getchar가()! = EOF)을 ((c = getchar가())! = EOF)'괄호를 추가하면서'이어야한다. 먼저 compare를 할당하고 비교 결과를 C에 대입하면 비교가 '0'을 반환하고 루프가 깨집니다. –
btw 질문을 다시 한 번 확인합니다. 문제의 조건은 표시된 코드 조각과 일치하지 않습니다. –
그래, 최근에'while (c! = EOF)'를'while (c! = 10)'으로 바 꾸었습니다. 그러나 나는 기술적으로 똑같은 일을한다고 생각합니다. 권리? 또한, 괄호를 추가하여 결과가 모두 0 인 결과를 얻었고, 4x13 매트릭스를 출력 했으므로 여기에서 지금 무슨 일이 벌어지고 있는지 알 수 있습니까? – Blued00d