キーボードから整数値を入力する度に、構造体の内容を動的に確保し、前から順番に昇順となるよう双方向リストに随時挿入していくプログラムを作成したいと考えています。
しかし
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}
回答1件
あなたの回答
tips
プレビュー