2011-06-17 94 views
3

我在写一个使用链表的程序(如恶梦)。C编程:链接列表

无论如何,该程序的目的是输入8个字符,并让程序将字符打印回给您,并使用链接列表以相反的顺序打印字符。

我到目前为止得到了这个结果。这有很多错误(我认为)。

的问题是

  • 当要求从它应该在的字符数读取用户的字符,而不必问了多少个字符

  • 而且,当它编译它打印自动乱码到屏幕上,例如我只是跑它和它印刷

    ¿r 
        (àõ($ê¿¿ 
    a¿r 
    (àõ($ê¿¿ 
    
    ¿r 
        (àõ($ê¿¿ 
    b¿r 
        (àõ($ê¿¿ 
    

这里需要大量的帮助。这将是非常感谢!

当然代码

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

#define strsize 30 

typedef struct member 
{ 
    int number; 
    char fname[strsize]; 
    struct member *next; 
} 
RECORD; 

RECORD* insert (RECORD *it); 
RECORD* print(RECORD *it, int j); 

int main (void) 
{ 
    int i, result; 
    RECORD *head, *p; 
    head=NULL; 
    printf("Enter the number of characters: "); 
    scanf("%d", &result); 

    for (i=1; i<=result; i++) 
     head=insert (head); 
    print (head, result); 

    return 0; 
} 

RECORD* insert (RECORD *it) 
{ 
    RECORD *cur, *q; 
    int num; 
    char junk; 
    char first[strsize]; 
    printf("Enter a character:"); 
    scanf("%c", &first); 

    cur=(RECORD *) malloc(sizeof(RECORD)); 

    strcpy(cur->fname, first); 
    cur->next=NULL; 

    if (it==NULL) 
     it=cur; 
    else 
    { 
     q=it; 
     while (q->next!=NULL) 
      q=q->next; 
     q->next=cur; 
    } 
    return (it); 
} 

RECORD* print(RECORD *it, int j) 
{ 
    RECORD *cur; 
    cur=it; 
    int i; 
    for(i=1;i<=j;i++) 
    { 
     printf("%s \n", cur->fname); 
     cur=cur->next; 
    } 
    return; 
} 
+0

请使用代码按钮({})让您的源代码可读。包含后显然还有一些东西丢失了。 – user658991 2011-06-17 03:51:48

+0

闻起来像功课给我。 – 2011-06-17 03:54:13

+0

这是作业!我只是在寻找一些帮助 – Jennifer 2011-06-17 03:54:41

回答

3

您有:

中插入:

char first[strsize]; 

scanf("%c", &first); /* note the %c */ 

strcpy(cur->fname, first); 

打印

printf("%s \n", cur->fname); 

你应该有%s代替%c,因此在参数列表中将&format更改为format,因为format本身表示字符串要存储的位置的地址。

所以scanf调用应该像下面

scanf("%s", first); 

另一件事。如果你在print函数中指定了返回类型,那么你应该返回一些东西,或者不返回任何东西(声明返回类型为void)。这在这种情况下不会造成任何问题。

阅读编译器向您发出的警告消息,您会看到编译器实际上已回答您的问题。

你需要做一些我认为重新设计。例如,要遍历链表,您不需要计数'j'。您可以通过检查next链接是否为NULL来检测列表终止。

你的问题是要反向打印字符或字符串,所以你需要写一些其他的打印功能比你写的。

+0

正确!它也不是以相反的顺序打印字符。甚至不像詹妮弗那样刺痛了那部分。 – peskal 2011-06-17 04:05:42