3

リンクリストを使用してプログラムを書いています(悪夢のようなものです)。

いずれにせよ、プログラムの目的は、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;
}
4

1 に答える 1

3

あなたが持っている:

挿入:

char first[strsize];

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

strcpy(cur->fname, first);

印刷中

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

それ自体が文字列が格納される場所のアドレスを表しているため、%s代わりに引数リストを%c変更&formatする必要があります。formatformat

したがって、scanf呼び出しは以下のようになります

scanf("%s", first);

別物。関数で戻り値の型を指定した場合は、print何かを返すか、何も返さないようにする必要があります (戻り値の型を として宣言しvoidます)。ただし、この場合は問題ありません。

コンパイラがスローする警告メッセージを読むと、コンパイラが実際に質問に答えていることがわかります。

あなたは私が思ういくつかの再設計を行う必要があります。たとえば、リンクされたリストをトラバースするには、「j」に対抗する必要はありません。nextリンクがNULLかどうかを調べることで、リストの終了を検出できます。

あなたの質問は、文字または文字列を逆に印刷することだったので、あなたが書いたものとは別の印刷機能を書く必要があります。

于 2011-06-17T03:59:37.530 に答える