ポインタを用いて入力されたアルファベットをアスキーコード昇順で並び替えるコード


入力されたアルファベットのランダムな文字列を、アスキーコードの昇順で並び替えて出力したいです。

**例**  
元の文字列: `bfGageGaheifhalenbcuafuhneixlDbfuhflfi0`  
並べ替え後: `DGGaaaaabbbceeeeffffffghhhhiiilllnnuuux`

数字が入力された時に入力を終了して出力します。

以下、自分で書いてみたのですが出力に最後の改行しか表示されません。  
コードの訂正お願いします。

追記  
現時点での明白なミスは修正しました。

head.next = &tail;の初期化によってうまくいかないとご意見をいただきましたが、具体的にどのように修正すればよいでしょうか。

[code]

    #include <stdio.h>
    #include <stdlib.h>
    
    struct ascii{
      int num;
      struct ascii *next;
    };
    
    
    int main(){
      int i;
      char c;
      struct ascii head, tail;
      head.next = &tail;
      tail.num=10000;
      for(;(i=getchar())<48 || i>57;){
        if(i==10){
          continue;
        }else{
        struct ascii *p=(struct ascii *)malloc(sizeof(struct ascii));
        p->num=i;
        struct ascii *w;
        for (w = &head; w->next != &tail;){
        if(w->next->num < p->num){
          w = w->next;
          if(w->next->num >= p->num){
        p->next=w->next;
            w->next=p;
        break;
          }
        }else{
          p->next=w->next;
        w->next=p;
        break;
        }
        }
        }
      }
      struct ascii *q;
      for(q=&head;q->next!=&tail;q=q->next){
        c=q->num;
        printf("%c", c);
      }
      printf("\n");
      return 0;
    }
    
[/code]




ぱっと見 `if(i=10)` は限りなく誤りっす。 [c](/questions/tagged/c "'c' のタグが付いた質問を表示") では、等号１つ
`=` は代入で、比較が欲しいのなら等号２つ `==` っす。

