제발 도와주세요ㅜㅜ replit에서 결과가 이상하게 떠요..
글쓴이: 챙 / 작성시간: 월, 2021/09/13 - 11:00오전
전체적인 함수를 만들었는데...
메인과 함수1만 잘라서 업로드합니다.. fscanf가 읽히지 않아서
aa 10 20 30 40
bb 23 24 45 65
이라는 내용이 쓰인 input2.txt가 있다고 치면
exe창에서 1 입력하고, input2.txt입력해도 fscanf가 제대로 작동하지 않아 p[0].name에 모든 내용물이 들어가버리게 됩ㄴ다... 뭐가 문제일까요ㅜㅜ
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> void func0(void);//1,2,3선택 및 이동 함수 void func1(char fname[30]); //1번 함수 void func2(void);//2번 함수 void func3(void);//3번 함수 int num = 0, num2 = 0, c = 0; char fname[30]; struct aa { char name[30]; int age; int math, english, history; }info, * p = NULL; int i = 0, k; int j; int main() { func0(); free(p); } void func0(void) { do { printf("============================\n"); printf("1) Insert\n2) Sort\n3) Quit\n"); printf("Select a menu : "); scanf(" %d%*c", &num); if (num == 1) { if (c == 0) { printf("File name : "); gets(fname); printf("\n"); func1(fname); } else { printf("Insert can be executed only one time."); printf("\n============================"); exit(1); } } else if (num == 2) { func2(); } else if (num == 3) { func3(); } else { printf("There is no menu. Program terminates."); printf("\n============================"); exit(1); } } while (num == 1 || num == 2); } void func1(char fname[30]) { c = 1; FILE* fp; fp = fopen(fname, "rt"); int ch; int count = 1; while ((ch = fgetc(fp)) != EOF) { if (ch == '\n') count++; } j = count; fclose(fp); freopen(fname, "rt", fp); p = malloc(sizeof(struct aa) * j); while (fscanf(fp, "%s %d %d %d %d", p[i].name, &p[i].age, &p[i].math, &p[i].english, &p[i].history) != EOF) { i++; } printf("No Name Age Math English History\n"); for (i = 0; i < j; i++) { printf("%d %s %d %d %d %d\n", i + 1, p[i].name, p[i].age, p[i].math, p[i].english, p[i].history); } fclose(fp); }
Forums:
printf 함수를 중간중간에 넣어보셔요. 어디에서
printf 함수를 중간중간에 넣어보셔요. 어디에서 기대한 값이 안 나오는지.
좀 더 고차원적으로 하려면 debug 에 대해 공부해 보셔요.
세벌 https://sebuls.blogspot.kr/
오류부분은 찾았는데
replit에서는 공백을 못 읽어들이는 건가요..?
공백을 기준으로 메모장의 덩어리들을 쪼개어 구조체배열에 할당하는 fscanf가 정상작동하지 않고, 메모장의 모든 내용들이 구조체배열 맨 첫째공간에 다 들어가버려요..
scanf 는 공백을 구분자로 쓸 겁니다. gets(
scanf 는 공백을 구분자로 쓸 겁니다. gets() (파일을 다룬다면 fgets() 등) 다른 함수를 고려해야 할 듯.
세벌 https://sebuls.blogspot.kr/
이 문제는 scanf와는 관련이 없습니다.
이 문제는 scanf와는 관련이 없습니다.
복사붙여넣기로 그대로 문제가 재현되도록 코드를 올리면 더 친절한 답을 얻을 수 있습니다.
문제와 상관없다고 생각되는 부분을 삭제하면서 코드를 수정하다보면 정확한 문제가 어디였는지를 찾을 수 있습니다.
코드에 다른 문제도 많이 있지만, freopen 직전의 fclose만 삭제하면 일단은 원하는 결과를 얻을 수 있을지도.
@세벌 도움을 주고자하는 욕구가 넘침은 알겠으나, 잘못된 도움은 피해가 될 수도 있음을 아시길.
정말 감사합니다.
몇날몇일을 고민하여 만든 만큼 너무 힘들었는데 바로 해결이 되네요..
파일처리를 비롯한 c언어 개념 공부를 더 탄탄히 해야겠어요ㅜㅜ
다시 한 번 감사합니다!!
댓글 달기