C言語のプログラミングについて質問です。
入力されたデータの配列とデータ数を渡すと配列に格納された値を逆順にして、格納し直す関数reverse関数を書き結果を出力せよ、というものなのですが下のように書いたのですが、うまく作動しません。どこがいけないのでしょうか...?教えていただきたいです。
#include <stdio.h>
void reverse(int *data[], int n);
#define MAX 100
int main()
{
int data[MAX];
int n, i;
scanf("%d", &n);
if (n >= MAX) n = MAX;
for (i = 0; i < n; i ++){
scanf("%d", &data[i]);
}
reverse(data, n);
for (i = 0; i < n; i ++) {
printf("%d\n", data[i]);
}
return 0;
}
void reverse(int *data[], int n)
{
int c, i;
for (i = 0; i < n; i ++) {
c = *data[i];
*data[i] = *data[n - (i + 1)];
*data[n - (i + 1)] = c;
}
}
No.5
- 回答日時:
>reverse(data, n);
>
>に問題があるようなエラーが出てしまうのですが、それもおっしゃられた修正で直すことができます>か…?
void reverse(int *data[], int n)
{
int c, i;
for (i = 0; i < n; i ++) {
の、for文のnだけ、n/2に直せばいいと思います。
使用しているコンピュータについてはよく分からないですが、多分大丈夫だと思いますが……?
この回答への補足
お返事ありがとうございます。n/2に直しただけでやってみたら、
reverse(data, n)の文に
passing argument 1 of ‘reverse’ makes pointer from integer without a cast
というようなエラーが出ました。しかし、reverse関数の*をすべてとったら、正しく作動しました。
ご回答ありがとうございました。
No.1
- 回答日時:
俺はC言語詳しくない。
1.
http://stackoverflow.com/questions/859634/c-poin …
を参考に「ポインタの配列」なのか「配列のポインタ」なのかを明確にしてみた。
2.以下のルーチンなんだがな。
3つの要素を逆転しようとして
行われることは
0と2を交換
1と1を交換
2と0を交換
しているから、元に戻るだけなんだよ。
void reverse(int (*data)[], int n)
{
int c, i;
for (i = 0; i < n ; i ++) {
c = (*data)[i];
(*data)[i] = (*data)[n - (i + 1)];
(*data)[n - (i + 1)] = c;
}
}
だから、半分しかやらないとか工夫すればちゃんと逆転されます
http://ideone.com/taQR9
この回答への補足
補足から失礼します。
ご丁寧な回答をありがとうございます。
しかし、このプログラムをターミナルで実行すると、
reverse(data, n);
に問題があるようなエラーが出てしまうのですが、それもおっしゃられた修正で直すことができるでしょうか…?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
関数から配列を返すには?
-
配列の要素数に変数を入れたい...
-
MFC - ダイアログボックスのPic...
-
C言語の2次配列
-
プログラム 数列の和
-
c言語
-
フィボナッチ数列の求め方
-
構造体のextern方法
-
RAW画像高速表示について
-
c言語プログラミング 等差数列...
-
C言語において、 配列要素をひ...
-
char gyou[1024];でcharの表現...
-
vector配列の重複を無くすには?
-
ループの条件設定について
-
100の階乗のプログラムって
-
すいません 下の修正版です。
-
define で 配列
-
int calc(int *a, int s, int t...
-
c言語 構造体
-
int i, int i[1];
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数から配列を返すには?
-
配列の要素数に変数を入れたい...
-
c言語
-
c言語プログラミング 等差数列...
-
define で 配列
-
構造体のextern方法
-
C#で構造体の配列を持った構造...
-
C言語において、 配列要素をひ...
-
MFC - ダイアログボックスのPic...
-
C言語の2次元配列 容量が大き...
-
2次元配列のマスを数える方法...
-
C言語 ファイルの指定された行...
-
Cのエラー
-
コンボボックスでデフォルト値...
-
C#で配列が空かを判定するには?
-
C#でのフィボナッチ数列
-
ポインタを使って構造体の配列...
-
C言語の課題が出たのですが自力...
-
MFCのCArrayを使った二次元配列
-
C言語の配列のコピーについて
おすすめ情報