파일입출력을 할때 fscanf와() fgets()는 각각 장단점이 있다.
fscanf 와 같은 경우는 정수형, 문자형, 문자열형을 형별로 입력이 가능하며,
개발자가 임의로 각각의 값을 구별하기 위해 구분자를 제공할 수 있다.
하지만 단점은 만약에 입력되어 있는 값이 한덩어리의 문자열이지만,
그 문자열이 공백을 포함하고 있는 경우에는 개발자가 임의로 구분자를 제공했더라도
추가적으로 공백도 구분자로 컴파일러가 받아들인다. 그래서 입력되어 있는 값이
예를 들어 "슈퍼맨이 돌아왔다" 인경우 fscanf()는 "슈퍼맨"이 "돌아왔다"를 따로 구분해버린다.
이러한 단점은 fgets()를 통해서 해결할 수 있다. fgets()와 같은 경우는 하나의 문자열은 그냥 그대로
하나의 문자열로 인식하다. 하지만 각각의 문자열은 개행으로 구별해 줘야 한다.
왜냐하면, fgets()는 공백으로 문자들을 구별하는게 아니라 개행으로 구별을 하기 때문이다.
그러므로 애초에 파일로 데이터를 출력할때 정수형은 정수형대로 구별하고 문자열은 문자열대로 구분해서
각각의 데이터를 fscanf()와 fgets()를 통해서 각각 입력 받으면 된다
출처: https://blueryankim.tistory.com/56 [I HAVE A DREAM]
void main()
{
int R;
FILE* fp = fopen("input.txt", "r");
fgets(expr, MAX_EXPR_SIZE, fp);
R = eval();
printf("postfix expression : %s\n", expr);
printf("the evaluation value : %d\n", R);
fclose(fp);
}
#include <stdio.h>
int main() {
FILE *fp;
int n[10], i;
fp = fopen("data.txt", "r");
for(i=0; i<10; i++)
fscanf(fp, "%d", &n[i]);
for(i=0; i<10; i++)
printf("%d\n", n[i]);
fclose(fp);
return 0;
}