双方向リストを用いて入力した数値を昇順に格納し、EOFの時にその要素を昇順、降順に表示するプログラムです。しかし、Ctrl + dを押してもプログラムが中止すらされない状況です。このプログラム以外のプログラムではCtrl + dは機能するため、プログラムに異常があると思います。どこが違うかご教示いただけますでしょうか。よろしくお願いいたします。
#include <stdio.h>
#include <stdlib.h>
struct data_t {
struct data_t *next, *prev;
int num;
};
struct data_t *insert_pos(struct data_t *p, struct data_t *w) {
if (p == NULL) {
} else {
while (w->num > p->num) {
p = p->next;
}
}
return p;
};
struct data_t head;
void printasc(struct data_t *p) {
struct data_t *q;
for (q=head.next; q!=&head; q=q->next) {
printf("%d", q->num);
}
}
void printdsc(struct data_t *p) {
struct data_t *q;
for (q=head.prev; q!=&head; q=q->prev) {
printf("%d", q->num);
}
}
void insert(struct data_t *p, struct data_t *w) {
struct data_t *p_prev;
p_prev = p->prev;
w->prev=p_prev;
p_prev->next=w;
p->prev=w;
w->next=p;
}
int main() {
struct data_t *p, *q;
int d, j;
head.prev=&head;
head.next=&head;
for (; scanf("%d", &d) != EOF;) {
p = (struct data_t *)malloc(sizeof(struct data_t));
p->num = d;
q = insert_pos(head.next, p);
insert(q, p);
p=p->next;
}
printf("EOF");
printasc(p);
printdsc(p);
}
回答4件
あなたの回答
tips
プレビュー