要素をキーボードから入力し、できた配列をひっくり返したものを表示するという問題。
また、配列の順番を逆にする操作は関数を作らなければならない。
自分なりに考えてコードを書いてみたのですがどうしてもコンパイルできません。
<コード>
#include <stdio.h>
void rev_intary(int v[], int n) {
for (int i = 0; i < n / 2; i++) {
int t = v[i];
v[i] = v[n - i];
v[n - i] = t;
}
}
int main(void) {
int n;
int v[n];
int a = 1;
do {
int i = 0;
printf("v[%d] :", i); scanf("%d", &v[i]);
printf("要素はまだある\nはい: 1 いいえ : -1"); scanf("%d", &a);
i++;
int n = i;
} while (a == 1);
rev_intary(v[n], n);
printf("反転しました\n");
for (int j = 0; j < n; j++) {
printf("v[%d] : %d", j, v[j]);
}
return 0;
}
<エラー内容>
21:21: warning: passing argument 1 of 'rev_intary' makes pointer from integer without a cast [-Wint-conversion]
21 | rev_intary(v[n], n);
| ~^~~
| |
| int
6-9.c:2:21: note: expected 'int *' but argument is of type 'int'
2 | void rev_intary(int v[], int n) {
どこを修正すべきか、またそれが不可能な場合、解答例をいただけましたら幸いです。
分かりづらくてすみません。
No.5ベストアンサー
- 回答日時:
C言語を学習中かと思いますが、可変長配列は扱わないほうが無難です。
とりあえず、vの要素数を100で確保し、100件までしか入力できないようにします。
コンパイルエラーをとりたいということなので、以下のようにしてください。
そうすれば、コンパイルエラーは取れます。
但し、実行すると期待した結果にはならないかもしれません。
その場合は、再度、質問してください。
#include <stdio.h>
void rev_intary(int v[], int n)
{
for (int i = 0; i < n / 2; i++) {
int t = v[i];
v[i] = v[n - i];
v[n - i] = t;
}
}
int main(void)
{
int n;
int v[100];
int a = 1;
int i = 0;
do {
printf("v[%d] :", i);
scanf("%d", &v[i]);
printf("要素はまだある\nはい: 1 いいえ : -1");
scanf("%d", &a);
i++;
n = i;
if (i >= 100) break;
} while (a == 1);
rev_intary(v, n);
printf("反転しました\n");
for (int j = 0; j < n; j++) {
printf("v[%d] : %d", j, v[j]);
}
return 0;
}
丁寧に回答例お答えいただき、ありがとうございます。大変感謝しております。無事、コンパイルのエラーがなくなりました。
エラー解消後、求めたい結果が得られませんでしたが、main関数とrev_intary関数のnの値を調整したところ、求めていた出力を得ることができました。
解決しました!ありがとうございます。
No.6
- 回答日時:
この程度のプログラムであれば、ChatGPTが添削してくれます。
実際、最後の「分かりづらくてすみません。」以外の質問文全文をChatGPTに入力してみたところ、私が想定する指摘を返してくれていましたのでそこそこ信頼はできると思います。是非ともそういったツールを活用してください。※よくある質問とその回答
Q. ChatGPTなどによる課題の解答作成はNGだと言われていますが?
A. ChatGPTだとダメでネット上の不特定多数の人間に回答を作らせる(「解答例をいただけましたら幸いです。」とあるため、その意図がありますよね)のがOKという道理はありません。
ありがとうございます。chatGPTを使ったことがなかったため、その発想に至りませんでした。また、課題自体はどこかに提出するものでなく、独学で遊ぶ範囲で行っていますので、やはりchatGPTの使い方を調べ、使ってみようと思います。ご親切な回答ありがとうございました。
No.4
- 回答日時:
コンパイラは 今時 C11?
エラーメッセージを読みましょう。
21行目がエラーと言ってますが・・・
passing argument 1 of 'rev_intary' makes pointer from integer without a cast
警告! rev_intary の第一引数はキャストなしに整数からポインタに変換されます。
expected 'int *' but argument is of type 'int'
2 | void rev_intary(int v[], int n) {
int * 型の引数に int を渡してます。
void rev_intary(int v[], int n) {
要するに、配列型の引数に int 渡すなと言ってます。
v[n] は 配列 v の インデックス n の要素という意味だから
int型です。
それ以前に 配列サイズ n を初期化してませんね。
まだまだ先は長い。
No.3
- 回答日時:
int n=i が間違いです。
do whileのスコープ内で変数nを再定義しているので、最初に定義した変数nにiの値が代入されません。
intを削除して、n=iにすればいいです。
No.2
- 回答日時:
No.1氏の指摘の通りですが、そもそも
void rev_intary(int v[], int n)
このときのint v[]っていう引数の型が何か理解してます?
intじゃないよ。int型の配列vの先頭を示すポインタだからね。
それとこの例題だとあらかじめ要素の数がわからない。どうやって入力された値を保持するかあらかじめ考えておかないといけない。
まともに動かすには配列を決め打ちで大目に宣言しておくか、mallocでメモリ領域を確保してそこにv[]を割り当てることになる。バッファ管理の練習にはなるかもね。rev_intary()の中でメモリ取っちゃだめだよ。main()でやらないと。
あと、変数宣言は関数の先頭のところでまとめてやるのとコメント入れる癖をつけたほうがいい。もちろん字下げもね。こんなコードでもきちんと変数宣言ブロック作ってコメント入れて字下げしておけば何が悪いか自分でわかる、っていうかこんな汚いコードレビュアーに見せたらボロカス言われるよ。
No.1
- 回答日時:
いや、これはダメだろ。
そもそもmain関数で定義されている配列vの「大きさ」を示す整数nが未定義のままだ。
結局用意する配列vも未定義のまま、となる。
Cって勝手に配列の大きさを考慮してくれてなんとかしてくれる言語じゃないんだ。
基本的なCのコンセプトに対して勘違いしてるよ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# 至急教えてください! プログラミングの問題です! お願いします! 出力2と全く同じ出力をするように、 2 2022/06/22 23:10
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# C言語です 2 2023/10/16 01:43
このQ&Aを見た人はこんなQ&Aも見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
治せない「クセ」を教えてください
なくて七癖という言葉どおり、人によっていろいろなクセがありますよね。 あなたには治せないクセがありますか?
-
【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
「出身中学と出身高校が混ざったような校舎にいる夢を見る」「まぶたがピクピクしてるので鏡で確認しようとしたらピクピクが止まってしまう」など、 これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
-
【穴埋めお題】恐竜の新説
【大喜利】 考古学者が発表した衝撃の新説「恐竜は、意外にもそのほとんどが〇〇〇」 (〇〇〇に入る部分だけを回答して下さい)
-
C言語をコンパイルするとコンピュータ上でどう動くかというコードになるみたいな説明をよく聞くのですがこ
C言語・C++・C#
-
mallocについて
C言語・C++・C#
-
プログラミングについて。 1つのループで Aという計算と Bという計算をするのと これらを分けて2つ
C言語・C++・C#
-
-
4
ArduinoのジャイロモジュールMPU6050について
C言語・C++・C#
-
5
オペアンプを使用したアナログ信号増幅回路に関するご質問
工学
-
6
電子レンジでコップに入ったサラダ油は温まりますか?
物理学
-
7
プログラミングの課題がわからないので教えていただきたいです。特にサークル関数を定義した後に呼び出す方
C言語・C++・C#
-
8
提灯や行灯って、蝋燭などの炎の周りを紙で囲むことで、明るさはアップしてるんでしょうか?
物理学
-
9
複素関数はどこはあんまりやらなくていいですか?
C言語・C++・C#
-
10
だれがとけるの?
C言語・C++・C#
-
11
なんで
C言語・C++・C#
-
12
プログラミング言語についてc++に空白あると同じ文字を再度繰り返して処理しないといけないので2倍動作
C言語・C++・C#
-
13
どうして+3
C言語・C++・C#
-
14
C# で 数式文字列処理を処理する方法
C言語・C++・C#
-
15
プログラミング ソースコード
その他(プログラミング・Web制作)
-
16
S・ホーキングは世界的に有名ですが、ノーベル賞は貰ってない、ことを知りました。 有名なほどには、業績
物理学
-
17
物質中の電子の速度の上限
物理学
-
18
微分とは何か
物理学
-
19
工学部で多様体の理論を扱うことはあるのでしょうか?
工学
-
20
応用情報技術者試験の令和元年秋、午後のプログラムの問題がわからないです。
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】看板の文字を埋めてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・【穴埋めお題】恐竜の新説
- ・我がまちの「給食」自慢を聞かせてっ!
- ・冬の健康法を教えて!
- ・一番好きな「クリスマスソング」は?
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
シェルピンスキーのギャスケット
-
C言語 エラーの原因がわからな...
-
【C++】関数ポインタの使い方
-
acceptをalarmでタイムアウトさ...
-
因数分解を行うプログラムについて
-
(マルチスレッド)_beginthrea...
-
std::set<int> で、ある値が何...
-
C言語での引数の省略方法
-
異なる文字列のマッチングを、D...
-
構造体のメンバ変数が途中で変...
-
ファイルから読みこむ方法
-
毎回違う乱数を生成するにはど...
-
「指定されたキャストは有効で...
-
ヒープ木の格納 【プログラミ...
-
C言語 巡回セールスマン問題 2-...
-
プログラミング
-
ColorをRGBで指定する方法
-
フィボナッチ数列のプログラム
-
商と剰余を同時に求める(C言語)
-
C言語でif文が予想と違う動きを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
複数桁10進数の*桁目だけを抽出...
-
C言語 エラーの原因がわからな...
-
#define _CRT_SECURE_NO_WARNIN...
-
ラップ関数とはどんなものですか?
-
【C++】関数ポインタの使い方
-
if と配列の組み合わせ
-
(int *)の意味
-
実数の整数部,小数部の取得
-
acceptをalarmでタイムアウトさ...
-
C言語
-
std::set<int> で、ある値が何...
-
因数分解を行うプログラムについて
-
数字列を3桁ごとにカンマで区切...
-
(マルチスレッド)_beginthrea...
-
比較回数と交換回数表示について
-
式は定数値が必要です」という...
-
int型の変数値をバイト列として...
-
c言語の配列を使ってサイコロを...
おすすめ情報