텍스트 파일에서 C의 배열로 숫자 읽기
저는 프로그래밍 초보니까 조금만 참아주세요.
텍스트 파일에서 배열로 숫자를 읽으려고 합니다.텍스트 파일인 "some numbers.txt"는 단순히 "5623125698541159"와 같이 16개의 숫자를 저장합니다.
#include <stdio.h>
main()
{
FILE *myFile;
myFile = fopen("somenumbers.txt", "r");
//read file into array
int numberArray[16];
int i;
for (i = 0; i < 16; i++)
{
fscanf(myFile, "%d", &numberArray[i]);
}
for (i = 0; i < 16; i++)
{
printf("Number is: %d\n\n", numberArray[i]);
}
}
프로그램이 작동하지 않습니다.컴파일하지만 출력은 다음과 같습니다.
번호: -104204697
번호: 0
번호: 4200704
번호: 2686672
번호: 2686728
번호: 2686916
번호: 2004716757
번호 : 1321049414
번호: -2
번호: 2004619618
번호: 2004966340
번호: 4200704
번호: 2686868
번호: 4200798
번호: 4200704
번호: 8727656
프로세스에서 20(0x14) 실행 시간을 반환했습니다. 0.118초 아무 키나 누르면 계속됩니다.
로 바꾸다
fscanf(myFile, "%1d", &numberArray[i]);
5623125698541159
단일 숫자로 처리됩니다(범위 밖).int
대부분의 건축물에서).당신은 당신의 파일에 다음과 같이 숫자를 적어야 합니다.
5 6 2 3 1 2 5 6 9 8 5 4 1 1 5 9
16개 숫자에 대해서.
파일에 입력이 있는 경우
5,6,2,3,1,2,5,6,9,8,5,4,1,1,5,9
그 다음에 바꿉니다%d
사용자의 지정자fscanf
로.%d,
.
fscanf(myFile, "%d,", &numberArray[i] );
다음은 몇 가지 수정을 거친 전체 코드입니다.
#include <stdio.h>
#include <stdlib.h>
int main(){
FILE *myFile;
myFile = fopen("somenumbers.txt", "r");
//read file into array
int numberArray[16];
int i;
if (myFile == NULL){
printf("Error Reading File\n");
exit (0);
}
for (i = 0; i < 16; i++){
fscanf(myFile, "%d,", &numberArray[i] );
}
for (i = 0; i < 16; i++){
printf("Number is: %d\n\n", numberArray[i]);
}
fclose(myFile);
return 0;
}
for (i = 0; i < 16; i++)
{
fscanf(myFile, "%d", &numberArray[i]);
}
이것은 전체 문자열을 읽으려고 시도하는 것입니다."5623125698541159"
안으로&numArray[0]
. 숫자 사이에 공백이 필요합니다.
5 6 2 3 ...
%d 대신 %c을 사용하여 스트림 문자를 읽습니다.
코드에 두 가지 문제가 있습니다.
- 의 신고가액
scanf
체크해야 함 - 그
%d
변환은 오버플로를 고려하지 않습니다(적용 blindly).*10 + newdigit
각 연속 숫자 문자에 대해)
당신이 얻은 첫번째 값)-104204697
)은 다음과 같습니다.5623125698541159
모듈로2^32
; 따라서 오버플로의 결과입니다(만약int
64비트 너비의 경우 오버플로가 발생하지 않습니다.다음 값은 초기화되지 않은 값(스택의 가비지)이므로 예측할 수 없습니다.
필요한 코드는 (위의 BLUEPIXY의 답변과 유사하며, 반환 값을 확인하는 방법 그림과 함께)일 수 있습니다.scanf
, 일치된 항목 수):
#include <stdio.h>
int main(int argc, char *argv[]) {
int i, j;
short unsigned digitArray[16];
i = 0;
while (
i != sizeof(digitArray) / sizeof(digitArray[0])
&& 1 == scanf("%1hu", digitArray + i)
) {
i++;
}
for (j = 0; j != i; j++) {
printf("%hu\n", digitArray[j]);
}
return 0;
}
다음과 같이 파일 입력을 입력합니다: 12 13 22 45 (모든 숫자를 입력한 후) 프로그램을 실행하면 프로그램이 제대로 실행됩니다.
언급URL : https://stackoverflow.com/questions/20378430/reading-numbers-from-a-text-file-into-an-array-in-c
'programing' 카테고리의 다른 글
Oracle에서 모든 필드가 고유한지 확인하는 방법은 무엇입니까? (0) | 2023.10.01 |
---|---|
sql 명령을 통해 mysql 이진 로그가 활성화되는지 어떻게 알 수 있습니까? (0) | 2023.10.01 |
Mac OSX 10.6으로 Ruby용 mysql2 gem 설치 (0) | 2023.09.26 |
시스템과 연결하는 방법.Data.OracleClient에서 Windows 인증으로 Oracle db로 이동하시겠습니까? (0) | 2023.09.26 |
Google 페이지 속도가 모바일에서 srcset을 무시합니다. (0) | 2023.09.26 |