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

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

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

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

Emacs

GNU Emacsと拡張性の高い、高性能なテキストエディタです。豊富なライブラリの導入により、統合開発環境やWebブラウザとしても機能させる事が可能です。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Q&A

2回答

938閲覧

10 文字以内の果物の名前 name を保持する単方向リスト list と整数 target を与えられると、list 内に含まれる target が 1 から数えて何番目にあるかを返し、list 内

dddddod

総合スコア4

C

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

Emacs

GNU Emacsと拡張性の高い、高性能なテキストエディタです。豊富なライブラリの導入により、統合開発環境やWebブラウザとしても機能させる事が可能です。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

0グッド

0クリップ

投稿2021/01/26 12:40

下記のプログラムを作ったのですが

C

1コード 2#include <stdio.h> 3#include <stdlib.h> 4#include <string.h> 5#define SIZE 10 6typedef struct element { 7 char name[SIZE]; 8 struct element *next; 9} element_type; 10 11void inputList(element_type **head); 12int find(element_type **head, char target); 13 14void inputList(element_type **head) { 15 int num; 16 printf("Elenemt num:"); 17 scanf("%d", &num); 18 19 element_type** tail = head; 20 int i; 21 for (i = 1; i <= num; ++i) { 22 char name[SIZE]; 23 printf("Element %d:", i); 24 scanf("%s", &name); 25 *tail = malloc(sizeof(element_type)); (*tail)->name = name; 26 (*tail)->next = NULL; 27 tail = &((*tail)->next); 28 } 29} 30 31int find(element_type **head, char target) { 32 element_type **p; 33 element_type *tmp; 34 int index = 0; 35 p = head; 36 while (*p != NULL) { 37 if((*p)->name == target){ 38 return index; 39 } else{ 40 } 41 index++; 42 } 43} 44int main(void) { 45 element_type *list = NULL; 46 element_type *p; 47 int index; 48 char target[SIZE]; 49 50 inputList(list); 51 52 printf("Input target:"); 53 scanf("%s", &target); 54 index = find(&list, target); 55 56 printf("#%d\n", index); 57 while(list != NULL) { 58 p = list; 59 printf("%s ", p->name); 60 list = p->next; 61 free(p); 62 } 63 printf("\n"); 64 return 0; 65}

で以下のエラーメッセージが表示されすのですがどこを変えれば良いでしょうか

コード test3-1-1.c:23:17: warning: format specifies type 'char *' but the argument has type 'char (*)[10]' [-Wformat] scanf("%s", &name); ~~ ^~~~~ test3-1-1.c:24:57: error: array type 'char [10]' is not assignable *tail = malloc(sizeof(element_type)); (*tail)->name = name; ~~~~~~~~~~~~~ ^ test3-1-1.c:36:19: warning: comparison between pointer and integer ('char *' and 'char') [-Wpointer-integer-compare] if((*p)->name == target){ ~~~~~~~~~~ ^ ~~~~~~ test3-1-1.c:49:13: warning: incompatible pointer types passing 'element_type *' (aka 'struct element *') to parameter of type 'element_type **' (aka 'struct element **'); take the address with & [-Wincompatible-pointer-types] inputList(list); ^~~~ & test3-1-1.c:13:31: note: passing argument to parameter 'head' here void inputList(element_type **head) { ^ test3-1-1.c:52:15: warning: format specifies type 'char *' but the argument has type 'char (*)[10]' [-Wformat] scanf("%s", &target); ~~ ^~~~~~~ test3-1-1.c:53:23: warning: incompatible pointer to integer conversion passing 'char [10]' to parameter of type 'char' [-Wint-conversion] index = find(&list, target); ^~~~~~ test3-1-1.c:30:36: note: passing argument to parameter 'target' here int find(element_type **head, char target) { ^

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

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

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

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

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

1T2R3M4

2021/01/26 13:00

Emacs限定の問題なのですか。
guest

回答2

0

学籍番号はなんですか?

投稿2021/02/04 18:18

uemuradesu---2

総合スコア2

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

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

0

それぞれのメッセージを読めるようになりましょう。

たとえば:

test3-1-1.c:23:17: warning: format specifies type 'char *' but the argument has type 'char (*)[10]' [-Wformat] scanf("%s", &name); ~~ ^~~~~

「書式指定では("%s"だから)char* が求められているが、実際には char(*)[10] が与えられている」と言うてます。
確かに scanf("%s", &name); において char name[10] ですからね。

正しくは scanf("%s", name); です。

もひとつ:

test3-1-1.c:24:57: error: array type 'char [10]' is not assignable *tail = malloc(sizeof(element_type)); (*tail)->name = name; ~~~~~~~~~~~~~ ^

「char[10] には代入できない」と言うてます。

正しくは strcpy((*tail)->name, name);

投稿2021/01/26 22:55

episteme

総合スコア16612

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

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

dddddod

2021/01/29 11:43

丁寧な説明ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問