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

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

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

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

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

リストボックス

ユーザーがリストから1つ以上のアイテムを選択できるようにするGUI要素です。

Q&A

解決済

1回答

1641閲覧

strcmpでエラーが出る理由を教えていただきたいです。

jump110

総合スコア10

C

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

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

リストボックス

ユーザーがリストから1つ以上のアイテムを選択できるようにするGUI要素です。

0グッド

0クリップ

投稿2021/07/14 15:27

キーボードから整数値を入力する度に、構造体の内容を動的に確保し、前から順番に昇順となるよう双方向リストに随時挿入していくプログラムを作成したいと考えています。
しかし

c

1if(strcmp(newCell->val,head->val)<0){

この部分で「incompatible integer to pointer conversion passing 'int' to parameter of type 'const char *」このようなエラーが起きてしまいます。教科書を真似してプログラムを書いているのですがどのように改善すればよいかわからないので教えていただきたいです。
下にプログラムの全文を載せておきます。

c

1#include<stdio.h> 2#include<string.h> 3#include<stdlib.h> //malloc 関数の利用 4//セルに関する構造体の定義 5typedef struct cell{ 6int val; //セル内の値 7struct cell *next; //上のセルを指す自己参照型ポインタ変数 8struct cell *back; //下のセルを指す自己参照型ポインタ変数 9}CELL; //構造体の再定義 10//関数のプロトタイプ宣言 11CELL* createCell(int); 12void insertCell(CELL *, CELL *); 13void printList(CELL *); 14void freeList(CELL *); 15//--------------------------------------------------------main 関数 16int main(void){ 17CELL *newCell; //新規セルを指すポインタ変数 18CELL *head; //先頭セルを指すポインタ変数 19int input; //入力値 20printf("入力した整数値を昇順に並べる双方向リストを生成します.\n"); 21while(1){ 22printf("追加する整数データを入力してください(終了:0):"); 23scanf("%d", &input); 24if(input == 0){ 25printf("入力を終了します.\n\n"); 26break; 27} 28newCell = createCell(input); //新規セルの生成 29if(head == NULL){ //リストにセルがない場合は,newCell が先頭セルになる 30head = newCell; 31}else { 32 if(strcmp(newCell->val,head->val)<0){ 33 newCell->next =head; 34 head->back = newCell; 35 head=newCell; 36}else{ 37 insertCell(head,newCell); 38} 39} 40} 41printList(head); //双方向リストの表示 42freeList(head); //全セルに対するメモリ領域の解放 43return 0; 44} 45//--------------------------------------------------------printList 関数 46void printList(CELL *current){ 47printf("リストの内容\n"); 48while(1){ 49printf("セルのアドレス:%p¥n", current); 50printf("セルが指す上方向セルのアドレス:%p\n", current->back); 51printf("セルの値:%d\n", current->val); 52printf("セルが指す下方向セルのアドレス:%p\n\n", current->next); 53if(current->next == NULL){break;} 54current = current->next; //注目セルを次のセルへ移動させる 55} 56} 57//--------------------------------------------------------insertCell 関数 58void insertCell(CELL *current, CELL *newCell){ 59while(current->next != NULL){ //注目セルに次のセルを指すポインタがある場合 60if(strcmp(current->val,newCell->val)<=0 && 61 strcmp(newCell->val,current->next->val)<0){ 62 newCell->next = current->next; 63 newCell->back = current; 64 current->next->back=newCell; 65 current->next = newCell; 66 break; 67 } 68else{ //上記の条件に該当しない場合は... 69current = current->next; //大小の確認位置を右にずらす 70} 71} 72if(current->next == NULL){ //一番右のセルまで確認位置がきたら... 73current->next = newCell; //その右側に新規セルを配置 74newCell->back = current; //新規セルが上向きに指すセルを,注目セルに設定 75} 76} 77//--------------------------------------------------------createCell 関数 78CELL* createCell(int value){ 79CELL *newCell = NULL; 80newCell = (CELL*)malloc(sizeof(CELL)); //セルのメモリ領域の確保 81if(newCell == NULL){ 82printf("メモリ領域を確保できませんでした.\n"); 83printf("プログラムを終了します.\n"); 84exit(-1); 85} 86 newCell->val = value ; 87 newCell->back = NULL ; 88 newCell->next = NULL ; 89return newCell; 90} 91//--------------------------------------------------------freeList 関数 92void freeList(CELL *current){ 93CELL *temp; //メモリの解放のためのポインタ 94while(1){ 95temp = current->next; //注目するセルの次のセルを temp に格納 96printf("セルのアドレス:%p\n", current); 97printf("セルが指す上方向セルのアドレス:%p\n", current->back); 98printf("セルの値:%d\n", current->val); 99printf("セルが指す下方向セルのアドレス:%p\n\n", current->next); 100free(current); //注目セルのメモリ領域を解放 101if(temp == NULL){break;} //current->next が NULL であった終了 102current = temp; //temp を利用して,注目セルを次のセルへ移動させる 103} 104}

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

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

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

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

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

mather

2021/07/14 15:34

エラーメッセージを翻訳して意味を理解しましたか?
jump110

2021/07/14 17:18

翻訳してみてエラーメッセージの内容はstrcmpは数字同士を比べる関数なのに比較対象が数字じゃないからエラーが出ているものだと読み取ったのですが間違ってるでしょうか?ただnewCellのvalの部分を指しているのでちゃんと数字を対象にとれていると思っているのですがこれも間違ってますか?
guest

回答1

0

ベストアンサー

翻訳してみてエラーメッセージの内容はstrcmpは数字同士を比べる関数なのに比較対象が数字じゃないからエラーが出ているものだと読み取ったのですが間違ってるでしょうか?ただ

正反対です。

strcmpは名前の通り文字列を比較する関数です。intを渡しても仕方ありません。

投稿2021/07/14 17:44

maisumakun

総合スコア145184

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問