2010-01-10 3 views
0

빠른 질문입니다.C : scanf 합계에 더한다.

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

여기서 t와 y는 각각 scanf 문 안에서 tArray와 yArray에 각각 추가됩니다. 양식의 무언가

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

고마워, 애쉬.

+0

'tArray'와'yArray'는 무엇을 나타 냅니까? 정확히 당신이 성취하고자하는 것은 무엇입니까? –

+0

@Ash - 편집을해야한다고 생각합니다. 'tArray + = t'는 배열 포인터를 메모리의 임의의 위치로 전진시킵니다. – Seth

+0

배열 요소에 값을 배치하려고합니까? –

답변

2

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)); 
} 

... 추한 있지만 작동합니다.

당신이 달성하기 위해 노력하고있다 :

0

C++에서이 방법은 상당히 쉽지만 C는 매우 까다 롭습니다.

1

포인터 연산으로 구조!

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

경우 t하고 처음에 자신의 배열의 시작 y 점.

물론 고유 한 범위 검사를 추가해야합니다.

+0

요청한 추가 작업을 수행하지 않는 것 같습니다. –

+0

실제로 스캔 한 값을 기존의 코드에 추가하기를 원하기 때문에 실제로 잘못했다고 생각합니다. – 3lectrologos

+0

예 죄송합니다 코드가 완전히 명확하지 않았으므로 지금 수정했습니다. – Ash

2

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

당신 그것을 할 fscanf() 래퍼를 작성할 수 있지만,이 매우 구체적인 사용 사례에 대한 작업의 단지 많이, 그리고 궁극적으로 단지 + = 후하는 것보다 느릴 것입니다.

2

불가능합니다. fscanf은 포인터에 의해 주어진 메모리 위치에 스캔 된 값을 쓰고 그 연산을 추가로 수행 할 방법이 없습니다.

+0

실제로 조금 잘못 했어도 추가 기능을 수행하게 만들었습니다. 전역 int 및 함수 선언 int * add (int * a) {i = + * a; 다음과 같이 scanf ("% d", add (&j));)를 호출하면 데이터가 제공된 후 원하는 추가 작업이 정확히 수행됩니다. D이 코드는 잘못되었지만 시도해야했습니다. D – mingos

+0

함수 호출 전에 함수 인자가 평가되기 때문에'add '가'scanf'전에 호출되기 때문입니다. – JaakkoK

0

질문입니다 (면책 조항이 코드를 컴파일하지 않은 경우)?
당신은 그냥 혼란을 줄이기와 같은 인라인 함수 뭔가 만들려면 :

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는 아마 수학보다 몇 배나 느리므로 대량 읽기 스타일로 전환하지 않고도 속도를 향상시킬 수 있다고 생각하지 않습니다. 프로그램을 훨씬 더 복잡하게 만듭니다.