빠른 질문입니다.C : scanf 합계에 더한다.
while(...) {
fscanf(input, "%lf %lf", &t, &y);
tTotal += t;
yTotal += y;
}
여기서 t와 y는 각각 scanf 문 안에서 tArray와 yArray에 각각 추가됩니다. 양식의 무언가
fscanf(input, "%lf %lf", ...code..., ...code...);
고마워, 애쉬.
빠른 질문입니다.C : scanf 합계에 더한다.
while(...) {
fscanf(input, "%lf %lf", &t, &y);
tTotal += t;
yTotal += y;
}
여기서 t와 y는 각각 scanf 문 안에서 tArray와 yArray에 각각 추가됩니다. 양식의 무언가
fscanf(input, "%lf %lf", ...code..., ...code...);
고마워, 애쉬.
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));
}
... 추한 있지만 작동합니다.
당신이 달성하기 위해 노력하고있다 :
C++에서이 방법은 상당히 쉽지만 C는 매우 까다 롭습니다.
포인터 연산으로 구조!
while(fscanf(input, "%lf %lf", t, y)) {t++; y++;}
경우 t
하고 처음에 자신의 배열의 시작 y
점.
물론 고유 한 범위 검사를 추가해야합니다.
요청한 추가 작업을 수행하지 않는 것 같습니다. –
실제로 스캔 한 값을 기존의 코드에 추가하기를 원하기 때문에 실제로 잘못했다고 생각합니다. – 3lectrologos
예 죄송합니다 코드가 완전히 명확하지 않았으므로 지금 수정했습니다. – Ash
이렇게하면 결과를 저장할 위치 이외에 원하는 작업을 알 수 있어야합니다 (변수가 아직 초기화되지 않은 경우에는 정의되지 않습니다). fscanf()
.
당신 이 그것을 할 fscanf()
래퍼를 작성할 수 있지만,이 매우 구체적인 사용 사례에 대한 작업의 단지 많이, 그리고 궁극적으로 단지 + = 후하는 것보다 느릴 것입니다.
불가능합니다. fscanf
은 포인터에 의해 주어진 메모리 위치에 스캔 된 값을 쓰고 그 연산을 추가로 수행 할 방법이 없습니다.
질문입니다 (면책 조항이 코드를 컴파일하지 않은 경우)?
당신은 그냥 혼란을 줄이기와 같은 인라인 함수 뭔가 만들려면 :
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는 아마 수학보다 몇 배나 느리므로 대량 읽기 스타일로 전환하지 않고도 속도를 향상시킬 수 있다고 생각하지 않습니다. 프로그램을 훨씬 더 복잡하게 만듭니다.
'tArray'와'yArray'는 무엇을 나타 냅니까? 정확히 당신이 성취하고자하는 것은 무엇입니까? –
@Ash - 편집을해야한다고 생각합니다. 'tArray + = t'는 배열 포인터를 메모리의 임의의 위치로 전진시킵니다. – Seth
배열 요소에 값을 배치하려고합니까? –