programing

텍스트 파일에서 C의 배열로 숫자 읽기

newstyles 2023. 10. 1. 19:19

텍스트 파일에서 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; 따라서 오버플로의 결과입니다(만약int64비트 너비의 경우 오버플로가 발생하지 않습니다.다음 값은 초기화되지 않은 값(스택의 가비지)이므로 예측할 수 없습니다.

필요한 코드는 (위의 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