C言語の、戻り値/値渡し/アドレス渡しのついて
【実装したコードに、戻り値/値渡し/アドレス渡しを用いたサブの関数を作成せよ。】
上記の課題に取り組んでいるのですが、何となく概念は分かったのですが、ソースコードに反映させようとすると詰まってしまって…
どなたか教えて頂けないでしょうか?
『ソースコード』
#include <stdio.h>
#include <time.h>
#include <string.h>
#include <stdlib.h>
#define CALC (3)
#define FROM_YEAR (1900)
#define MAX_LINE (1000)
int cmp_u(const void* a, const void* d) {
return strcmp((char*)a, (char*)d);
}
int cmp_d(const void* a, const void* d) {
return strcmp((char*)d, (char*)a);
}
int main() {
int num1, num2;
char op;
float answer;
int r,i;
FILE* fp;
char e[11];
char sin[1000][1000];
char ad[8];
fp = fopen("log.txt", "a+");
if (fp == NULL) {
printf("ファイルオープン失敗\n");
return -1;
}
while (1) {
r = scanf("%d%c%d", &num1,&op, &num2);
if (r != CALC) {
puts("input error");
return 1;
}
if (op == '+') {
answer = num1 + num2;
}
else if (op == '-') {
answer = num1 - num2;
}
else if (op == '*') {
answer = num1 * num2;
}
else if (op == '/') {
answer = (float)num1 / num2;
}
time_t t = time(NULL);
struct tm* tm = localtime(&t);
printf("%d/%02d/%02d ", tm->tm_year + FROM_YEAR, tm->tm_mon + 1, tm->tm_mday);
printf("%02d:%02d:%02d ", tm->tm_hour, tm->tm_min, tm->tm_sec);
printf("%d%c%d,%f\n", num1, op, num2, answer);
fprintf(fp, "%d/%02d/%02d ", tm->tm_year + FROM_YEAR, tm->tm_mon + 1, tm->tm_mday);
fprintf(fp, "%02d:%02d:%02d ", tm->tm_hour, tm->tm_min, tm->tm_sec);
fprintf(fp, "%d%c%d,%f\n", num1, op, num2, answer);
printf("計算を続けますか?");
scanf("%s", e);
if (strcmp(e, "no") == 0) {
break ;
}
}
fclose(fp);
fp = fopen("log.txt", "r");
int cnt = 0;
for (i = 0;i < MAX_LINE;i = i + 1) {
if (fgets(sin[i], sizeof(sin[0]), fp))
++cnt;
else
break;
}
fclose(fp);
printf("ASC or DESC: ");
scanf("%s", ad);
if (strcmp(ad, "ASC") == 0) {
qsort(sin, cnt, sizeof(sin[0]), cmp_u);
}
else {
qsort(sin, cnt, sizeof(sin[0]), cmp_d);
}
for (i = 0;i < cnt;i = i + 1) {
printf("%s", sin[i]);
}
return 0;
}