C语言有关链表的问题
为什么显示出来的是非数字?#include<stdio.h>#include<stdlib.h>#include<ctype.h>typedefstructdate{ch...
为什么显示出来的是非数字?#include <stdio.h>#include <stdlib.h>#include <ctype.h>typedef struct date{ char *a; struct date *next;}sin1;sin1 *qq=NULL,*n; void enter(char *s){ n=malloc(sizeof(sin1)); n->a=s; n->next=qq; qq=n;}char *quit(){ char *z=malloc(sizeof(char)); z=qq->a; return z;}int main (){ char a[10]="1q2e34",s[2]; char *q; int z=0; s[1]='\0'; while(a[z]!='\0'){ s[0]=a[z]; if( isdigit ( s[0] )==0 ){ ////当s[0]不是数字时从链表中取出最近存入的字符 q=malloc(sizeof(char)); q=quit(); printf("q : %s\n",q);} if( isdigit ( s[0] ) ){ //当 s[0] 是数字时,存入链表 enter(s); } z++;} return 0;}
前面表述有问题
为什么打印指针q没有显示‘1’,‘2’呢? 展开
前面表述有问题
为什么打印指针q没有显示‘1’,‘2’呢? 展开
2个回答
2016-09-08
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
typedef struct date{
char *a;
struct date *next;
} sin1;
sin1 *qq=NULL,*n;
void enter(char *s){
n=malloc(sizeof(sin1));
n->a=s; // 此处有问题,每次让这个节点的这个指针的值为s,
// 而s是一个固定的字符数组, 在main函数中,每次给s[0]虽然赋了不同的值,
// 但其实是把以前存在里面的数字给覆盖掉了,
// 所以只能看到每次最后赋值进去的字母,
// 也就是你所看到的情况了
#include <stdlib.h>
#include <ctype.h>
typedef struct date{
char *a;
struct date *next;
} sin1;
sin1 *qq=NULL,*n;
void enter(char *s){
n=malloc(sizeof(sin1));
n->a=s;
n->next=qq;
qq=n;
}
char *quit(){
char *z=malloc(sizeof(char));
z=qq->a;
return z;
}
int main (){
char a[10]="1q2e34",s[2];
char *q;
int z=0;
s[1]='\0';
while(a[z]!='\0'){
s[0]=a[z];
if( isdigit ( s[0] )==0 ){ ////当s[0]不是数字时从链表中取出最近存入的字符
q=malloc(sizeof(char));
q=quit();
printf("q : %s\n",q);
}
if( isdigit ( s[0] ) ){ //当 s[0] 是数字时,存入链表
enter(s);
}
z++;
}
return 0;
}
n->next=qq;
qq=n;
}
char *quit(){
char *z=malloc(sizeof(char));
z=qq->a;
return z;
}
int main (){
char a[10]="1q2e34",s[2];
char *q;
int z=0;
s[1]='\0';
while(a[z]!='\0'){
s[0]=a[z];
if( isdigit ( s[0] )==0 ){ ////当s[0]不是数字时从链表中取出最近存入的字符
q=malloc(sizeof(char));
q=quit();
printf("q : %s\n",q);
}
if( isdigit ( s[0] ) ){ //当 s[0] 是数字时,存入链表
enter(s);
}
z++;
}
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询