C言語のエラー処理について
下記のコードを作成したのですが、入力エラーの際に出力される表示が意図した
input error
の出力と違う形で表示されてしまい、修正方法が分からず、どなたか教えて頂けないでしょうか?
・『あ』等の整数以外の文字が入力された時
input errorinput errorinput error
・/0が入力された時
input error
input error
input error
「ソースコード」
#include <stdio.h>
#include <time.h>
#include <string.h>
#include <stdlib.h>
#define CALC (3)
#define FROM_YEAR (1900)
#define MAX_LINE (1000)
#define MAX_ROW (1000)
float calc_proc(int* n1, char op, int n2, float* ans) {
switch (op) {
case '+':
*ans = (float)*n1 + n2;
break;
case '-':
*ans = (float)*n1 - n2;
break;
case '*':
*ans = (float)*n1 * n2;
break;
case '/':
if (n2 == 0) {
puts("input error");
return 1;
}
*ans = (float)(float)*n1 / n2;
break;
default:
printf("input error");
return 1;
break;
}
return 0;
}
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 i;
FILE* fp;
char e[11];
char sin[MAX_LINE][MAX_ROW];
char ad[8];
fp = fopen("log.txt", "a+");
if (fp == NULL) {
printf("ファイルオープン失敗\n");
return -1;
}
while (1) {
scanf("%d%c%d", &num1, &op, &num2);
calc_proc(&num1, op, num2, &answer);
if (calc_proc(&num1, op, num2, &answer) != 0) {
puts("input error");
return 1;
}
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");
if (fp == NULL) {
printf("ファイルオープン失敗\n");
return -1;
}
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;
}
お礼
C言語を触った事なくチャレンジしていますが、 あまりに知識が無さ過ぎてボヤッとした質問ですいませんでした。 やり方を変えて再度チャレンジします。