前提・実現したいこと
実行&計算するたびに現在時刻がファイルに書き込み表示される電卓アプリケーションを作りたい。
発生している問題・エラーメッセージ
dentaku関数の加算処理で、処理落ちしてしまいます。
該当のソースコード
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> //マクロ宣言 #define ONE "もう一度入力してください" #define ERR "ファイルオープンエラー" #define FIL "log.txt" #define MAXC 100 #define MAXR 100 //昇順関数 int asc( const void * a , const void * b ) { return strcmp(( char * )a , ( char * )b ); } //降順関数 int desc( const void * a , const void * b ) { return strcmp(( char * )b , ( char * )a ); } //電卓関数 int dentaku(int a, char ch, int b, int *ans) { int okflag = 0; if(ch == '+'){ *ans = a + b; ←ここで処理落ちしてしまう。 printf("%d %c %d = %d\n",a,ch,b,*ans); okflag = 0; }else if(ch == '-'){ *ans = a - b; printf("%d %c %d = %d\n",a,ch,b,*ans); okflag = 0; }else if(ch == '*'){ *ans = a * b; printf("%d %c %d = %d\n",a,ch,b,*ans); okflag = 0; }else if(ch == '/'){ if(b == 0){ okflag = -1; printf("右辺の値に0が入力され、処理が終了しました。"); //return okflag; }else{ *ans = a / b; printf("%d %c %d = %d\n",a,ch,b,*ans); okflag = 0; } }else{ printf("演算子に想定外の文字が入力され、終了いたしました。\n"); okflag = -1; } return okflag; } int main(void) { //宣言 int i = 0; int n = 0; int *ans; int ret = 0; int ret1 = 0; int var1,hi1,hi3; int index = 0; int okflag = 0; char array[MAXR][MAXC],a,ch[10],hi2; char moji[MAXC]; char ret; char s[10] = "ASC"; char s1[10] = "DESC"; FILE *fp; fp = fopen(FIL, "a+" ); time_t timer; struct tm *local; timer = time(NULL); local = localtime(&timer); do{ fflush(stdin); ret = scanf("%d %c %d",&hi1,&hi2,&hi3); //printf("ret = %d\n",ret); }while(ret < 3); dentaku(hi1,hi2,hi3,ans); if(var1 == -1){ return 0; } fprintf(fp, "%d/%02d/%02d %02d:%02d:%02d, %02d %c %02d, %d\n",local->tm_year + 1900,local->tm_mon + 1,local->tm_mday,local->tm_hour,local->tm_min,local->tm_sec,hi1,hi2,hi3,ans); fclose(fp); fp = fopen(FIL,"r"); if(fp == NULL){ printf( "%s\n",ERR); return 0; } while(a = fgets(moji,sizeof(moji),fp) != NULL) { strcpy(array[index],moji); //printf("moji = %s\n array[index] = %s\n index = %d\n",moji,array[index],index); index++; } fclose(fp); do{ fflush(stdin); ret1 = scanf("%s",&ch[0]); printf("\n"); if(strcmp(ch,s) == 0){ printf("ASCを入力しました\n"); qsort(array[0], index, sizeof *array, asc); okflag = 1; }else if(strcmp(ch,s1) == 0){ qsort(array[0], index, sizeof *array, desc); printf("DESCを入力しました\n"); okflag = 1; }else{ printf("%s\n",ONE); } }while(okflag == 0); for (i = 0; i < index; i++) { printf("%s\n", array[i]); } return 0; }
試したこと
コメントアウトすれば一応通りますがよくわからない数値がでてしまいます。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。