2013-02-02 2 views
0

텍스트 및 이진 파일 모두에서 배열을 읽고, 쓰고 채울 수 있음을 보여줄 필요가있는이 프로그램이 있습니다. 나는 바이너리 파일과 함께 많은 발행을하지 못했지만 텍스트 파일은 큰 시간을 두뇌 통증을주고있다.fgets를 사용하여 텍스트 파일에서 배열 채우기

나는이 약간의 코드가 탓할 것이라고 믿습니다. userInputText [MAXSIZE]는 문자 배열 (MAXSIZE는 100000으로 정의 됨)이고 textCount와 textCounter는 프로그램이이 시점에 0으로 초기화됩니다.

textPointer = fopen("textFile.txt", "r"); 
if (textPointer) 
{ 
    while (fgets(userInputText, sizeof(userInputText), textPointer) != NULL) 
    { 
     sscanf(userInputText, "%d", &textCount); 
     userInputText[textCounter] = textCount; 
     textCounter += 1; 
    } 
} 

사용자가 프로그램을 처음 실행하면 프로그램의이 부분이 건너 뛰고 사용자가 텍스트 파일을 만들고 쓰도록 요청됩니다. 사용자가 정수를 입력하면 텍스트 파일에 쓰여지고 userInputText에 저장되고 프로그램 끝 부분에 화면에 표시됩니다. 모든 것은 잘 동작하며 프로그램이 실행될 때마다 텍스트 파일이 올바르게 추가됩니다. 위 코드에서 생각할 수있는 모든 콤보에 대해 시도했습니다. 나는 fopen (r +), sizeof (int 및 MAXSIZE)를 사용하여 % d을 실험 해 보았습니다. 나중에 프로그램에서 내 fprintf 부분에서 "\ n"을 delimeter로 설정했지만 제거하려고 시도했습니다. 나는 fread를 위해 fgets를 교환했다. Ive는 내가 문제의 똥을 던지고있는 비비와 닮았던 주안점에 도착했다.

나는 사람들이 게으르다 고 생각하지 않고, 정신적으로 장애가있을 수도 있지만 게으른 것은 아닌 쉬운 대답을 찾고 싶지 않습니다.

제안 사항?

감사합니다,

마이크

+0

프로그램을 실행하면 실제로 어떻게됩니까? – Hassan

+1

정확히 무엇을하려고하십니까 *? 이 코드는'FILE *'스트림의 형식화 된 텍스트 입력에서 정수를 읽으려고 시도합니다. 그런데 이상한 이유로 당신은 방금 텍스트로 읽은 바로 그 값으로 라인 처리에 사용하는 * 동일한 텍스트 버퍼 *를 업데이트합니다 ,하지만 이제 int 변환 결과. 그게 당신의 의도라면 (그리고 나는 그것이 어떻게 될 수 있는지는 알 수 없습니다.) 그래도 되겠지만, 읽은 각각의 새로운 줄에 방금 저장 한 가치를 날려 버리고 있다는 것을 깨닫고 있습니까? – WhozCraig

+0

처음 프로그램을 실행할 때. 그것은 사용자에게 숫자를 입력하도록 요청합니다. 사용자가 -999를 입력 할 때까지 while 루프에서 scanf (% d)를 수행합니다. 사용자가 반복되는 동안 숫자는 userInputText []에 저장되고 카운터는 아래 첨자에 대해 증가됩니다. 그런 다음 fprintf (textPointer, "% d \ n", textTemp); 파일을 텍스트 파일에 씁니다. 이 시점까지 배열과 텍스트 파일은 괜찮습니다. 사용자가 더 많은 숫자를 입력 할 수있게하기 전에 텍스트 파일을 기반으로 배열을 채워야하기 때문에 문제가있는 곳에서 다음 프로그램을 실행합니다. –

답변

0

sizeof(userInputText)while(!feof(textPointer)) { fgets(userInputText,MAXSIZE,textPointer); } 만 문자 포인터의 크기를 반환합니다보십시오.

+0

'userInputText'가 고정 배열로 선언 된 경우 OP가 구체적으로 * is *로되어있는 경우에는 그렇지 않습니다. – WhozCraig

+0

나는 여기서 모두에게 충분히 대답하고 싶다. 내 지시 사항은 5,000 개의 숫자에 ip를 저장하고 사용자가 숫자를 배열에 입력하고 숫자를 파일에 저장할 수 있도록 정수 배열을 만드는 것입니다.사용자가 두 번째 코드를 실행할 때 파일에 저장된 숫자를 기반으로 배열을 채워야합니다. 나중에 프로그램에서 사용자는 채워진 배열이 중단 된 부분을 넘는 숫자를 더 입력 할 수 있어야합니다. –

+0

코드는 텍스트 파일과 바이너리 파일 모두에 쓰고 읽어야합니다. 내 바이너리 파일에 대해 몇 가지 varriation (fread, fwrite 등)을 사용하여 동일한 코드를 작성했는데 훌륭하게 작동했습니다. 원래 게시 한 코드는 (첫 번째 실행 후) 파일을 가져 와서 배열을 채워야합니다. 파일에 20 개의 숫자가있는 경우. 10,20,30 등 .. 나는 userInputText [20] = textCount로 프로그램의 입력 부분으로 가서 배열에 추가하기 시작해야한다. 나는 전체 프로그램을 게시 하겠지만 길다. –

관련 문제