문자열과 정수로 구성된 외부 파일 (.dat)을 다음 형식으로 읽으려고합니다.
문자열 1
문자열 2
문자열 3 등
그리고 이러한 값을 별도의 배열에 저장합니다 (하나는 문자열 용, 다른 하나는 정수용). 그러나 파일의 첫 번째 정수만 할당 할 수 있으며 모든 후속 정수와 존재하는 문자열은 할당되지 않습니다. 이 부분에 대한 내 코드는 다음과 같습니다.
char string[20]; /*20 is used as a placeholder for the time being*/
int integer[20];
FILE *inp2; /*pointer to input file 2*/
int file_succeed1 = fopen_s(&inp2,"C:\\Users\\input2b.dat", "r"); /*Boolean test*/
if (file_succeed1 != 0)
{
printf_s("There was an error opening the file \n");
return 0; /*The file failed to be read, end of program.*/
}
for(i = 0; i <=20; i++)
{
fscanf_s(inp2, "%s", &string[i], 20);
fscanf_s(inp2, "%d", &integer[i]);
}
fclose(inp2); /*close the input file*/
정보를 인쇄하려고 할 때 경고 메시지가 나타납니다.
경고 C4477 : 'printf': 형식 문자열 '% s'에는 'char *'유형의 인수가 필요하지만 가변 인수 1에는 'int'유형이 있습니다.
경고 C4313 : 'printf': 형식 문자열의 '% s'가 'int'유형의 인수 1과 충돌합니다.
정수로만 구성된 외부 파일의 값을 읽고 할당했지만이 경우 문자열이나 후속 정수를 할당하는 방법을 알 수 없습니다. 어떤 도움이라도 대단히 감사합니다. 감사합니다.
참고 : 다차원 배열을 사용하지 말라고 명시 적으로 조언했지만 병렬 배열은 괜찮습니다.
밝히다:
char string[20][20];
다음을 사용하여 읽기 :
if (fscanf_s(inp2, "%s %d", string[i], 20, &integer[i]) != 2)
…report error and break loop…
최대 20 개의 정수를 읽으려면 20 개의 문자열도 필요하며 각 문자열에는 여러 문자를위한 공간이 필요합니다. 2D 문자 배열을 사용하는 것은 매우 간단하며 포인터를 이해할 필요가 없습니다. 제안 된 코드는 두 개의 개별 호출을 fscanf_s()
하나로 대체 합니다. 완벽하게 처리 할 수 있습니다. I / O 작업 (특히 입력 작업)이 성공했는지 항상 확인하십시오. 참고 fscanf_s()
EOF 또는 1 (명목상 0)뿐만 아니라 2를 반환하지만, 성공을 나타냅니다 만이 할 수있다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다