質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

1回答

840閲覧

C言語のコンパイルへの出力について

saito_666

総合スコア4

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2022/11/14 06:23

前提

下記の課題に対して「例外がスローされました」との表示が出てしまい、コンパイルに出力がされない状態です。
どなたか修正点を教えて頂けないでしょうか?

コンソールからパラメータを受け取り、ログを実行時間の昇順/降順に並べ替えて
コンソールに表示する
例)ASC を入力

2015/04/26 10:20:00, 5 + 6, 11
2015/04/27 14:30:51, 7 - 6, 1
2015/04/27 15:30:00, 7 + 8, 15
2015/04/28 14:30:51, 8 + 9, 17
例)DESC を入力

2015/04/28 14:30:51, 8 + 9, 17
2015/04/27 15:30:00, 7 + 8, 15
2015/04/27 14:30:51, 7 - 6, 1
2015/04/26 10:20:00, 5 + 6, 11

実現したいこと

コンパイルへの出力
ここに実現したいことを箇条書きで書いてください。

発生している問題・エラーメッセージ

例外がスローされました。

該当のソースコード

ソースコード
#include <stdio.h>
#include <time.h>
#include <string.h>
#include <stdlib.h>

int cmp_u(const void* a, const void* d) {
return (int)a - (int)d;
}

int cmp_d(const void* a, const void* d) {
return (int)d - (int)a;
}

int main() {
int num1, num2;
char op;
float answer;
int r,i;
FILE* fp;
char a[11];
char sin[9];
char ad;

fp = fopen("log.txt", "a"); if (fp == NULL) { printf("ファイルオープン失敗\n"); return -1; } while (1) { r = scanf("%d%c%d", &num1, &op, &num2); if (r != 3) { 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 + 1900, 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 + 1900, 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\n", &a); if (strcmp(a, "no") == 0) { break ; } } fclose(fp); printf("ASC or DESC: "); scanf(" %s", &ad); if (strcmp(a, "no") == 0) { qsort(sin, 9, sizeof(int), cmp_u); } else { qsort(sin, 9, sizeof(int), cmp_d); } for (i = 0; i < 9; i++) { printf("%d\n", sin[i]); } return 0;

}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

episteme

2022/11/14 06:35

> int cmp_u(const void* a, const void* d) { return (int)a - (int)d; } > int cmp_d(const void* a, const void* d) { return (int)d - (int)a; } ポインタをintに変換していいんですか?
jimbe

2022/11/14 06:41 編集

>C言語のコンパイルへの出力 て何でしょう。 C言語は(一般的に)コンパイラで、コンパイルは「翻訳すること」です。それに「出力」とは? >「例外がスローされました」との表示が出てしまい ご提示のコードを C コンパイラに渡したらコンパイラからそう表示されたということでしょうか。その一文だけでしょうか。他にも色々でていませんか? (まともなコンパイラなら、何が問題なのかを具体的に表示してくるはずです。) どのようなコンパイラをどのように使っているのか(コマンドラインでどう入力したのか)等の環境・操作手順等もご提示頂いたほうが良いように思います。 また、コードは「コードのマークダウン」を用いてご提示ください。 用いないと、コード内の記号がフォーマット指示と解釈されて、表示がおかしくなったりコピペ時に必要な記号が無かったりしてしまいます。
jimbe

2022/11/14 07:49 編集

・・・何か、ログと関係無い四則演算するコードが混じっていますけど。 あぁ、「四則演算したログ」を出すのですね、失礼しました。 >コンソールからパラメータを受け取り、ログを実行時間の昇順/降順に並べ替えて >コンソールに表示する なら、ファイルへの出力は要らないということでしょうか。
ozwk

2022/11/15 01:08

スタックオーバーフロー(リンク上記)の方で解決済み
guest

回答1

0

ベストアンサー

文字列入力時の scanf のパラメータや、qsort 前の if 等で間違いがあるようです。
sin に値が入ってないですし qsort には int だと伝えてますが char 配列ですし 本当に 9 個の値が入るかどうかも分かりません(1個だけだったらどうするのでしょうか。)

投稿2022/11/14 06:52

編集2022/11/14 06:55
jimbe

総合スコア12648

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問