首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

懂链表的大神帮小弟我看看吧,感激不尽

2012-12-29 
懂链表的大神帮我看看吧,感激不尽首先我不是很懂结构体我是想写一个结构体,先确定是否开始下去,然后去掉输

懂链表的大神帮我看看吧,感激不尽
首先我不是很懂结构体
我是想写一个结构体,先确定是否开始下去,然后去掉输入字符数组中的数字然后输出那个字符数组,询问是否继续,然后一直循环
前面的没问题
主要是while后面关于字符数组处理的算法我也会,但是放到这个结构体中就出错   希望大神帮我改改,顺便帮我普及下知识懂链表的大神帮小弟我看看吧,感激不尽



#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
#include<string.h>
 int i;
int main(void)
{
struct zhifu
{
int no;
char chuan[80];
char chuan2[80];
char huiwen;
struct zhifu *next;
};
struct zhifu *first = NULL;
struct zhifu *ing = NULL;
struct zhifu *ing2=NULL;
struct zhifu *previous = NULL;
char test='\0';
for(;;)
{
printf("\n你想继续输入字符数组吗(Y or N)?",first != NULL?"nother":"");
scanf("%c",&test);
if(tolower(test)=='n')
break;

ing=(struct zhifu*)malloc(sizeof(struct zhifu));

if(first==NULL)
first =ing;

if(previous!=NULL)
previous->next=ing;
printf("\n这是第几次定义字符数组:");
scanf("%d",&ing->no);
printf("\n请定义第%d次字符数组:",ing->no);
scanf("%s",ing->chuan);

ing->next=NULL;
previous=ing;
    fflush(stdin);
}
ing=first;
ing2=ing;
while(ing!=NULL)
{
ing->chuan;
ing2=ing;
for( ; ing.chuan = ing2.chuan; ++ing2.chuan )     
if( ing2.chuan <'0' || ing2.chuan >'9' ) ++ing.chuan;

previous=ing;
ing=ing->next;
free(previous)
}
return 0;
}

[解决办法]
while里面的算法有几个地方不对
1,对数组名进行自加运算,错误,应用指针
for( ; ing.chuan = ing2.chuan; ++ing2.chuan )     
        if( ing2.chuan <'0' 
[解决办法]
 ing2.chuan >'9' ) 
              ++ing.chuan;
就好像下面这个错误的例子。
char a[20], b[20]
  for ( ; a = b; b++)
     if (....)
       ++a;
2,

while(ing!=NULL)
{
    ing->chuan;  // 这个用来干什么的????
    ing2=ing;      // 这里的ing2指向ing一样的地方,并没有给ing2分配独立的空间,
                         // 下面不能释放的
    for( ; ing.chuan = ing2.chuan; ++ing2.chuan )     
        if( ing2.chuan <'0' 
[解决办法]
 ing2.chuan >'9' ) ++ing.chuan;
             
    //previous=ing;
    ing=ing->next;
    //free(previous)  // 这时free ing2就也被释放了 
}

3. 还有一个地方,就是scanf("%s",ing->chuan); 输入完成之后接一个换行符,这个换行符会留在输入缓冲区中,要把加一句getchar()把它吸收掉,不然
printf("\n你想继续输入字符数组吗(Y or N)?",first != NULL?"nother":"");
    scanf("%c",&test);


这里的test得到的输入永远是上面的换行符,并不能让用户自己输入。

我稍微改了一下,把去掉数字的字符串存入chuan2成员(还是在同一个结构体内)
 

 

热点排行