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

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

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

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

Q&A

解決済

2回答

1379閲覧

C言語  入力値の文字列を 関数に渡すと警告 うまくいかない

kokok

総合スコア145

C

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

0グッド

1クリップ

投稿2019/07/30 04:28

編集2019/07/30 04:37

c

1int main(void) { 2 3 char map[WORLD_H][WORLD_W]; 4 5 system("cls"); 6 7 COORD coord; 8 HANDLE hStdout; 9 hStdout = GetStdHandle(STD_OUTPUT_HANDLE); 10 11 12 13 14 int checkno; 15 char inva[50]; //入力された値 16 int len; //入力された文字数 17 int hikaku; // 入力値の後ろ4文字が .txt であるかどうか 18 char* ap = inva; 19 20 21 printf("数字を入力してください(乱数) 文字または文字列を入力してください(ファイル読み込み) 21行以上エラー"); 22 scanf("%s", &inva); 23 24 checkno = check_number(inva); //数値か文字、文字列かのチェック。     25 26 len = strlen(inva); //入力された文字数 取得 27 28 29 30 31 32 if (checkno == -1) { //入力された値が文字か文字列だった場合 33 34 hikaku = strcmp(inva + strlen(inva) - 4, ".txt"); //入力値 後ろ 4文字が .txt だったら テキストファイルを読み込み 35 if (hikaku == 0) { 36 37 fileop(map,ap); 38 exit(10); 39 } 40 else { // 入力値 後ろ 4文字が .txt ではなかったら 終了 41 printf("テキストファイルではありません"); 42 exit(10); 43 } 44 45 46//ファイル読み込む 47void fileop(char temp[WORLD_H][WORLD_W], char txtname[]) { 48 49 FILE* fp; 50 char txt; 51 52 53 54 55 fp = fopen(txtname, "r"); 56 if (fp == NULL) { 57 printf("%s file not open!\n", txtname); 58 59 return; 60 } 61fclose(fp); 62} 63 64 65 66

scanf 入力された文字列を  fileop 関数に 受け渡して そのテキストファイルを開きたいのですが

受け渡しが上手くいきません。

警告が2つでます。
1.'fileop': 実引数が多すぎま        この部分→ fileop(map,ap);

2.宣言されたパラメーターリストが定義と一致しません。 この部分→void fileop(char temp[WORLD_H] [WORLD_W], char txtname[]) {

この二つの警告が出ます。
警告で言われていることは何となく分かるのですが、なかなか上手くいかないのでアドバイス頂けると助かります。

----------追記---------
警告 消えてました。すいません。

こうした方が良いなどコードにアドバイス頂けたら幸いです。

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

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

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

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

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

mather

2019/07/30 04:46

> 警告 消えてました。すいません。 聞きたいことが終わっているなら自己解決にしましょう。 なんにせよ、提示されているコードがぐちゃぐちゃで何をしたいのかわかりません。
kokok

2019/07/30 04:59

すいません。 今後はもっと整理して質問するようにします。
guest

回答2

0

関数fileopのプロトタイプ宣言が,提示コードの末尾付近に書かれている実装と異なっているとか?

投稿2019/07/30 04:46

fana

総合スコア11654

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

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

kokok

2019/07/30 04:58

プロトタイプ宣言に間違いがありました。 ありがとうございます。
fana

2019/07/30 06:52

できれば,低評価の理由をご教示願いたく. (「?」で終わってる文章はとても回答とは呼べない,とか?)
kokok

2019/07/30 07:48

自分は押していないので他の方が間違えて押されたのかと。 高評価押しておきます。
fana

2019/07/30 08:02

低評価を押した方に向けて問うていますので, あなた自身による評価に関しては,それとは無関係に行っていただきたく.
guest

0

ベストアンサー

C言語のコンパイラというのは、ソースの最初から順番に解釈していきます

fileop(map,ap);

の行の解釈のとき、どういう動作をするのかといえば、
・いままでfileop 関数の定義には出会わなかった
・となると、この関数の定義を、int fileop(char**,char*) として解釈を続けていく
という動作で、コードの解釈を続けていきます。

そして、

void fileop(char temp[WORLD_H][WORLD_W], char txtname[]) {

の関数宣言の行に来ると、あらかじめ読み込んでいた関数定義と型が違う、ということでワーニングが出ます

このワーニングを消すには、あらかじめ、コードの最初の方で関数定義をしておけばいいということになります

ということで、
void fileop(char temp[WORLD_H][WORLD_W], char txtname[]);
という定義行をコードの最初の方においてやってみてください

投稿2019/07/30 04:46

y_waiwai

総合スコア87749

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

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

kokok

2019/07/30 04:57

解決いたしました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問