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

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

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

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

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

Q&A

解決済

4回答

1918閲覧

C コンパイルエラー

chums

総合スコア2

C

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

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

0グッド

0クリップ

投稿2021/06/11 01:31

編集2021/06/11 02:09

C言語でキーボードから20個の点のx、y座標を配列pに入力させるプログラム
のコンパイルがエラーになってしまいます。色々な書き方をしてみたのですが点の入力のコードが間違っているのかその他でエラーになっているのかが分からななく手詰まり状態という感じです。エラーの書き忘れ申し訳ないです。

Main.c:14:8: error: assigning to 'int' from incompatible type 'struct point'
pivot =p[somewhere];
^~~~~~~~~~~~~
Main.c:16:16: error: invalid operands to binary expression ('struct point' and 'int')
do{ while(p[i]<pivot)i++;
~~~~^~~~~~
Main.c:17:16: error: invalid operands to binary expression ('struct point' and 'int')
while(p[j]>pivot)j--;
~~~~^~~~~~
Main.c:19:13: error: assigning to 'int' from incompatible type 'struct point'
{ temp = p[i];p[i] =p[j];p[j] =temp;
^ ~~~~
Main.c:19:36: error: assigning to 'struct point' from incompatible type 'int'
{ temp = p[i];p[i] =p[j];p[j] =temp;
^~~~~
Main.c:24:21: error: member reference base type 'int' is not a structure or union
quicksort(first.j);/pivotより小さなデータについてquicksort()を行う/
~~~~~^~
Main.c:39:17: error: use of undeclared identifier 'n'
for (i =1;i<n;i+ +)
^
Main.c:39:23: error: expected expression
for (i =1;i<n;i+ +)
^
Main.c:40:46: warning: '&&' within '||' [-Wlogical-op-parentheses]
if(p[i].y<p[min].y ||p[i].y==p[min].y&&p[i].x>p[min].x)
~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
Main.c:40:46: note: place parentheses around the '&&' expression to silence this warning
if(p[i].y<p[min].y ||p[i].y==p[min].y&&p[i].x>p[min].x)
^
( )
Main.c:42:22: error: expected expression
temp =p[0];p[0] =[min];p[min] =temp;/関数area()を使って1番目以降の点を偏角順にソート/
^
Main.c:44:16: error: use of undeclared identifier 'n'
for(i =2;i<n;i++)
^
Main.c:45:27: error: no member named 'p' in 'struct point'
{while (area(p[top-1].p[top].p[i])<= 0)
~~~~~~~~ ^
Main.c:47:11: warning: misleading indentation; statement is not part of the previous 'while' [-Wmisleading-indentation]
temp [top];p[top] =p[i];p[i]=temp;
^
Main.c:45:6: note: previous statement is here
{while (area(p[top-1].p[top].p[i])<= 0)
^
Main.c:47:16: error: subscripted value is not an array, pointer, or vector
temp [top];p[top] =p[i];p[i]=temp;
~~~~ ^~~~
Main.c:54:1: error: unknown type name 'Void'; did you mean 'void'?
Void main(void)
^~~~
void
Main.c:54:1: error: 'main' must return 'int'
Void main(void)
^~~~
int
Main.c:58:47: error: expected expression
printf("p[%d].y=",i); scanf("%d",&p[i].y);)
^
Main.c:62:2: error: expected '}'
}
^
Main.c:55:1: note: to match this '{'
{
^
2 warnings and 16 errors generated.

C

1#include<stdio.h> 2#include<math.h> 3#define N 20 4struct point{int x,y;}; 5struct point p[N]; 6int area(struct point q1,struct point q2,struct point q3) 7{ 8 return((q1.x-q3.x)*(q2.y-q3.y)+(q2.x-q3.x)*(q3.y-q1.y)); 9} 10void quicksort(int first,int last)/*quicksort()*/ 11{int i,j,pivot,somewhere,temp; 12 if(first<last) 13 {somewhere=(first+last)/2; 14 pivot =p[somewhere]; 15 i = first;j =last; 16 do{ while(p[i]<pivot)i++; 17 while(p[j]>pivot)j--; 18 if(i<=j) 19 { temp = p[i];p[i] =p[j];p[j] =temp; 20 /*pivotより大きなデータp[i]とpivotより小さいデータo[j]を交換する*/ 21 i++;j--; 22 } 23 }while(i<=j); 24 quicksort(first.j);/*pivotより小さなデータについてquicksort()を行う*/ 25 quicksort(i,last);/*pivotより大きなデータについてquicksortを行う*/ 26 27 28 } 29 30} 31int GrahamScan() 32{ 33 int i,top,min; 34 struct point temp; 35 int area(); 36 void quicksort(); 37 38 min =0; 39 for (i =1;i<n;i+ +) 40 if(p[i].y<p[min].y ||p[i].y==p[min].y&&p[i].x>p[min].x) 41 min =i;/*最も下の番号を求める*/ 42 temp =p[0];p[0] =[min];p[min] =temp;/*関数area()を使って1番目以降の点を偏角順にソート*/ 43 top =1; 44 for(i =2;i<n;i++) 45 {while (area(p[top-1].p[top].p[i])<= 0) 46 top --;/*3点が時計回りなら中央の点を除去*/ 47 temp [top];p[top] =p[i];p[i]=temp; 48 /*i番目の点を凸包の点として登録(元のデータを破壊しないため、topとi番目の点を交換する)*/ 49 } 50 return(top+1);/*凸包の頂点を報告*/ 51 52 53} 54Void main(void) 55{ 56for(int i =0; i < N; ++i){ 57 printf("p[%d].x=",i); scanf("%d",&p[i].x); 58 printf("p[%d].y=",i); scanf("%d",&p[i].y);) 59 60 61 62}

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

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

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

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

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

int32_t

2021/06/11 01:38 編集

エラーメッセージを記入してください。 コードを人に見せる前にちゃんと整形しましょう。インデントがメチャクチャでとても読みにくいです。
neconekocat

2021/06/11 01:38

コンパイルエラーが出るならその行数なりエラー内容なりが表示されるはずですが何と表示されていますか? 大方未定義のnが使われているとかだと思いますが。
1T2R3M4

2021/06/11 01:55

{}があってないとかもありそうです。
nob.

2021/06/11 02:16

Main.c:14:8: error: assigning to 'int' from incompatible type 'struct point' pivot =p[somewhere]; に対して、どういう対応をしましたか? それとも、メッセージの意味が分からないのでしょうか? そこをはっきりさせて下さい。そうでないと、どう答えていいか分かりません。 因みに、このメッセージの意味は、 型が異なる物を代入しようとした、という意味です。
int32_t

2021/06/11 02:33

エラーメッセージが追記されましたね。 2警告16エラーそれぞれにたいして、メッセージの意味がわからないのか対処方法がわからないのか書いてください。 あと、struct point の値をどういう順番でソートしたいのか不明確ですね。x=3 y=2 と x=1 y=5 はどちらが大きいのでしょうか?
chums

2021/06/11 02:41

色々なご指摘ありがとうございます。 2警告16エラーメッセージに対しての対処意味が分かりません。
int32_t

2021/06/11 02:56

「Main.c:54:1: error: unknown type name 'Void'; did you mean 'void'?」に対して意味も対処もわからないとなると英語は苦手なのですね。苦手でも翻訳ソフトを使うなりして頑張って読んでくださいね。
guest

回答4

0

エラーメッセージぐらいは読みましょう。

エラーメッセージは怒声でも暴言でも罵倒でもハラスメントでもなく、
コンパイラ等からのメッセージです

つまり、今の状態は『相手の話をまったく聞かずに逆ギレしている人』です。

そんな人はコミュニケーションなんて取れませんよね。

まずは相手の話を聞くことから始まります。


[追記1]

英語が苦手なら『Google翻訳』とかを使えばいいでしょ。……と思うのですが。

プログラマは『考える事』と『調べる事』が仕事です。
趣味であっても。

仕事をするときもおんぶに抱っこでやるのでしょうか。違いますよね。

なので調べることを学びましょう。
そうすれば上達が早くなります。

Main.c:14:8: error: assigning to 'int' from incompatible type 'struct point' pivot =p[somewhere]; [訳] Main.cの14行目、エラーっす。なんかぁ、struct pointをintとして当ててるっすよ? pivot = p[somewhere]; のところっす。

その14行目の周辺を見ると、pivot = p[somewhere]; ですが、

p[N] は「point構造体」です。
でも pivot は int。

それでは出来るはずがありません。

フライパンを食い物と見立てるようなものです。え? 人間が作ったものでしょ? って感じで。

Main.c:62:2: error: expected '}' [訳] Main.cの62行目、エラーっす。なんかぁ、終了ブロック(?) のやつ、足りないっすよ?

プログラムは上から下へ流れるように処理していきます。

コンパイラは左上から右に向かっていき、さらに下にもぐっていきます。

投稿2021/06/11 01:58

編集2021/06/12 13:34
BeatStar

総合スコア4962

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

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

0

最終行の
2 warnings and 16 errors generated
は、警告(コンパイル自体は可能だが、バグの原因になりそうな『通常の書き方とは違う書き方をしている』個所)が2個、エラー(コンパイル自体が不可能な文法上の誤り)が16個発見されたことが書かれています。
それぞれの警告、エラーについて、あなた自身どのように解釈して、どのように対処しようとして、最終的にどう失敗したのかがわかると、アドヴァイスのしようもあるかと思います。
xxx.c:ll:cc: tttt: ~~内容~~
xxx: ファイル名
ll: 行数
cc: 何文字目か(多分)
tttt: タイプ(警告 or エラー)
の形で警告とエラーが表示されています。一つずつ切り分けて解決していきましょう

投稿2021/06/11 04:42

WoodenHamlet

総合スコア306

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

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

0

なんか、文法がむちゃぐちゃですねー
基本的なところをもちょっとしっかり学びましょう。

ってところで、ひとつだけ。
main関数ですが、カッコの数があってませんよ

投稿2021/06/11 02:52

y_waiwai

総合スコア88042

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

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

0

自己解決

ご指摘を受けて自分でもう一度調べて直せるところは直してみました。
色々なご指摘感謝します。これからは自分で調べて理解ができない部分を切り取って質問していきます。

c

1#include<stdio.h> 2#include<math.h> 3#define N 20 4struct point{ int x, y; }; 5struct point p[N]; 6struct point pivot, temp; 7int area(struct point q1, struct point q2, struct point q3) 8{ 9 return((q1.x - q3.x)*(q2.y - q3.y) + (q2.x - q3.x)*(q3.y - q1.y)); 10} 11void quicksort(int first, int last) 12{ 13 int i, j, somewhere; 14 15 if (first<last) 16 { 17 somewhere = (first + last) / 2; 18 pivot = p[somewhere]; 19 i = first; j = last; 20 do{ 21 while (area(p[0], pivot, p[i])<0)i++; 22 while (area(p[0], pivot, p[j])>0)j--; 23 if (i <= j) 24 { 25 temp = p[i]; p[j] = temp; 26 27 i++; j--; 28 } 29 } while (i <= j); 30 31 quicksort(first, j); 32 quicksort(i, last); 33 } 34} 35int GrahamScan() 36{ 37 int i, top, min; 38 struct point temp; 39 //int area(); 40 //void quicksort(); 41 min = 0; 42 for (i = 1; i < N; i++) 43 if (p[i].y < p[min].y ) 44 min = i; 45 temp = p[0]; p[0] = p[min]; p[min] = temp; 46 47 quicksort(1, N - 1); 48 top = 1; 49 for (i = 2; i<N; i++) 50 { 51 while (area(p[top - 1], p[top], p[i]) <= 0) top--; 52 top++; 53 temp = p[top]; p[top] = p[i]; p[i] = temp; 54 } 55 return(top + 1); 56} 57void main(void) 58{ 59 int i,k; 60 for (i = 0; i < N; i++){ 61 printf("p[%d].x=", i); 62 scanf("%d", &p[i].x); 63 printf("p[%d].y=", i); 64 scanf("%d", &p[i].y); 65 } 66 k = GrahamScan(); 67 68 69 printf("%d", k); 70 for (i = 0; i < k; i++){ 71 printf("(%d,%d)", p[i].x, p[i].y); 72 } 73 74 75 76 77 78}

投稿2021/06/14 23:41

chums

総合スコア2

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

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

thkana

2021/06/15 00:04

> これからは自分で調べて理解ができない部分を切り取って質問していきます。 それはどうでしょう...自分で調べて理解できなかった部分は実は正しくてそこに接続する「理解しているつもり」の部分との整合が間違っている、という可能性もあります。 今回見る限りだれも「余計なことを書くな」とは言っていないでしょう。そもそも、あなたが問題を解決できていないのであれば、どこが間違いなのかわかっていないわけです。そのあなたに、どこを切り取ったら適切なのかの判断ができるでしょうか? もちろん、症状が変わらない範囲で情報を絞り込んでいく分には構いませんというか歓迎すべき行動ですけれど「関係ないと思った」だけでその部分を切り捨ててしまうことには慎重になるべきと思います。多すぎる情報は読み手側で無視することはできますが、書いていない情報は読み手は知ることができないのです。であれば、質問には多少冗長になる可能性はあっても多くの情報を盛り込んだほうがよい(=解決につながる)とは思えませんか? (まぁ、たまには「そこは関係ない」という指摘を受けることはあるでしょうが) 他の方の質問でも、「関係ないと思った」「大丈夫と思った」で質問に書かれなかった部分にうまくいかない原因があった、ということはしばしばあることです。情報を削りすぎないようにしてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問