문제

빠른 질문이 있을 수행할 수 있는 방법을 3 이러한 작업:

while(...) {
fscanf(input, "%lf %lf", &t, &y);
tTotal += t;
yTotal += y;
}

하나의 작업에서 어디 t y 자신을 추가 tArray 및 yArray 각각 내부 scanf 명입니까?의 양식

fscanf(input, "%lf %lf", ...code..., ...code...); 

감사,Ash.

도움이 되었습니까?

해결책

방법은 없을 넣어만으로 매개변수의 fscanf 기능 때문에 fscanf 지 포인터를 단순히 쓰는 그들의 위치입니다.그러나,당신은 여전히 추가를 만들의 일부는 동 문의 다음과 같다:

while(...) {
    fscanf(input, "%lf %lf", &t, &s), tTotal += t, sTotal += s;
}

참고 결과의 이 말은 가치의 표현입니다.그래서 예를 들어,당신을 기록하고 싶었던 반환 값의 scanf 해야 합:

while(...) {
    int res;
    useResult((res = fscanf(input, "%lf %lf", &t, &s), tTotal += t, sTotal += s, res));
}

...는 못생긴 하지만 작동합니다.

(면책 조항:나지 않은 컴파일된 이 코드)

다른 팁

그렇게하는 것이 필요합니다 fscanf() 결과를 저장할 위치 외에도 원하는 작업을 알고 있습니다 (변수가 아직 초기화되지 않은 경우 정의되지 않음).

~할 수 있었다 래퍼를 작성하십시오 fscanf() 그렇게하기 위해서는 매우 구체적인 사용 사례에 대한 많은 작업 일 뿐이며 궁극적으로 += 이후에하는 것보다 느리게 진행됩니다.

불가능합니다. fscanf 스캔 한 값을 포인터가 제공 한 메모리 위치에 단순히 기록하며 해당 작업이 추가를 수행 할 수있는 방법이 없습니다.

구조에 대한 포인터 산술!

while(fscanf(input, "%lf %lf", t, y)) {t++; y++;}

어디에 t 그리고 y 처음에는 배열의 시작을 가리 킵니다.

물론, 자신의 바운드 검사를 추가해야합니다.

C ++에서 이것은 상당히 쉽지만 C는 매우 어려울 것입니다 (기껏해야).

문제는 : 당신은 무엇을 달성하려고합니까?
혼란을 줄이려면 : 인라인 함수를 작성하십시오.

int GetData(FILE *fp, double *ptTotal, double *pyTotal)
{
    double t, y;
    if (2 == fscanf(fp, "%lf %lf", &t, &y))
    {
         *ptTotal += t;
         *pyTotal += y;
         return 1;
    }
    else
    {
        return 0;
    }
}

그리고 그것을 루프로 호출하십시오.

그러나 루프 속도를 높이 겠다는 희망이 있다면, 나는 당신의 기회가 마음에 들지 않습니다. FSCANF는 아마도 수학보다 느리게 느리기 때문에 대량 독서 스타일로 전환하지 않고 속도를 높이게 될 것이라고 생각하지 않으므로 프로그램이 훨씬 더 복잡해집니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top