user-0 提问: 各位大神帮我看看这个程序哪有错（十六进制转八进制）

回复:
user: user-0
content: 引用 3 楼 自信男孩的回复:#include<stdio.h> #include<math.h> #include<string.h> #include<stdlib.h>  typedef struct yu{     int data;     struct yu *next; }yu;  yu *Create_yu(int a,yu *head)//顺序存储八进制数 {     yu *p;     p = (yu *)malloc(sizeof(yu));     p->data = a;     p->next = head->next;     head->next = p;     return (head); } void output_yu(yu *head)//输出八进制数 {     yu *p;     //p=head;     p = head->next;     //while(p->next!=NULL)     while(p)     {         //printf("%d",p->next->data);         printf("%d",p->data);         p = p->next;     }     printf("\n"); } int main() {     int i,j,m;//循环变量     int n,l,L,shi/*十进制数*/,scm/*十进制幂*/,shang,a/*把十六进制每一位转换为整数*/;     //char str[100000];    //你确定要输入这么多字符吗？并且还在栈上申请     char str[128];     scanf("%d",&n);     for(i=0;i<n;i++)     {         shi=0;         scanf("%s",str);         l=strlen(str);         scm = l-1;         for(j=0;j<l;j++)         { //转换为十进制             if(str[j]>='A'&&str[j]<='F')                 a = str[j]-'A'+10;             else if(str[j]>='a'&&str[j]<='f')                 a=str[j]-'a'+10;             else if(str[j]>='0'&&str[j]<='9')                 a = str[j]-'0';             shi += a*pow(16,scm);             scm--;         }         //转换为八进制         yu *head;         int x;         shang=shi;         head=(yu *)malloc(sizeof(yu));         head->next=NULL;         do {    //解决输入0，而没有任何输出的问题             x = shang%8;             head = Create_yu(x,head);             shang = shang/8;         } while (shang);         /*         while(shang!=0)         {             x = shang%8;             head = Create_yu(x,head);             shang = shang/8;         }         */         output_yu(head);     }     return 0; }  供参考！ 对，好像就这个问题，谢了

user: user-1
content: #include<stdio.h> #include<math.h> #include<string.h> #include<stdlib.h>  typedef struct yu{     int data;     struct yu *next; }yu;  yu *Create_yu(int a,yu *head)//顺序存储八进制数 {     yu *p;     p = (yu *)malloc(sizeof(yu));     p->data = a;     p->next = head->next;     head->next = p;     return (head); } void output_yu(yu *head)//输出八进制数 {     yu *p;     //p=head;     p = head->next;     //while(p->next!=NULL)     while(p)     {         //printf("%d",p->next->data);         printf("%d",p->data);         p = p->next;     }     printf("\n"); } int main() {     int i,j,m;//循环变量     int n,l,L,shi/*十进制数*/,scm/*十进制幂*/,shang,a/*把十六进制每一位转换为整数*/;     //char str[100000];    //你确定要输入这么多字符吗？并且还在栈上申请     char str[128];     scanf("%d",&n);     for(i=0;i<n;i++)     {         shi=0;         scanf("%s",str);         l=strlen(str);         scm = l-1;         for(j=0;j<l;j++)         { //转换为十进制             if(str[j]>='A'&&str[j]<='F')                 a = str[j]-'A'+10;             else if(str[j]>='a'&&str[j]<='f')                 a=str[j]-'a'+10;             else if(str[j]>='0'&&str[j]<='9')                 a = str[j]-'0';             shi += a*pow(16,scm);             scm--;         }         //转换为八进制         yu *head;         int x;         shang=shi;         head=(yu *)malloc(sizeof(yu));         head->next=NULL;         do {    //解决输入0，而没有任何输出的问题             x = shang%8;             head = Create_yu(x,head);             shang = shang/8;         } while (shang);         /*         while(shang!=0)         {             x = shang%8;             head = Create_yu(x,head);             shang = shang/8;         }         */         output_yu(head);     }     return 0; }  供参考！

user: user-1
content: 引用 1 楼 user-2 的回复:我跑了一下，没错，唯一发现的问题是当输入0的时候，程序出现死循环了 不是死循环，而是没有输入。你继续输入还是有数据的

user: user-2
content: 我跑了一下，没错，唯一发现的问题是当输入0的时候，程序出现死循环了