• 締切済み

Cのソースコードについて

以下のソースコードをかきました。 #include<stdio.h> #include<string.h> #define MAX 100005 typedef struct PP { int t; char name[100]; }P; P Q[MAX]; int head, tail, n; void enqueue(P u) { Q[tail] = u; tail = (tail + 1) % MAX; } P dequeue() { P x = Q[head]; head = (head + 1) % MAX; return x; } int min(int a, int b) { return a > b ? a : b; } int main() { int q, sum = 0 , w; scanf("%d %d", &n,&q); for (int i = 1; i <= n; i++){ scanf("%s", Q[i].name); scanf("%d", &Q[i].t); } head = 1; tail = n + 1; P u; while (head != tail) { u = dequeue(); w = min(q, u.t); sum += w; u.t -= w; if (u.t > 0)enqueue(u); else { printf("%s %d", u.name, sum); } } return 0; } これでVisual C++ でコンパイルしたところ特にエラーも起きず問題なく動作しました しかしAOJに提出してみたところコンパイルエラーになってしまい詰んでしまいました どこかダメそうなところがあれば教えてください

みんなの回答

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.4

>しかしAOJに提出してみたところコンパイルエラーになってしまい詰んでしまいました コンパイルエラーだけではわかりません。 (AOJの)コンパイル環境とコンパイルエラーのメッセージくらいわからないことには。 #1の方へ >C:30: error: 'for'loop initial declaration used outside C99 mode outsideがかかるのはC99 modeの方なので「C99モードの外」→「C99モード以外」 「C99モードでないのにforループの初期化部分で変数定義が使用されています」というエラーです。

すると、全ての回答が全文表示されます。
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

No1にぬけているとこがあったので訂正しておきます。 >Cygwinのwindows版のversion4.3.4でコンパイルすると は、 Cygwinのwindows版のgccのversion4.3.4でコンパイルすると です。コンパイルそのものはgccで行なっています。 C99の実装の状況については以下のほかにたくさんあります。 https://ja.wikipedia.org/wiki/C99

すると、全ての回答が全文表示されます。
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

>int i 「;」が抜けていました。 int i;

すると、全ての回答が全文表示されます。
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

Cygwinのwindows版のversion4.3.4でコンパイルすると、 C:30: error: 'for'loop initial declaration used outside C99 mode というエラーがでます。つまり「C99モードでは変数宣言はfor文の外で してください。」ということです。 int i for (i = 1; i <= n; i++){ のようにするエラーはでません。 AOJのコンパイラは何を使っているのかわかりませんが、 多分、Visual C++ をコンパイラで使っていることはないでしょうし、 一般的にはgccを使っているのでは、と思います。ただし、バージョン はわかりません。 C99の規則がどの程度各コンパイラに浸透しているのかわかりませんが、 gccの最新のバージョンでサポートしているようです。 http://futurismo.biz/archives/1897

すると、全ての回答が全文表示されます。

関連するQ&A