gpt4 book ai didi

C编程-输入3个字符并逆序打印

转载 作者:太空宇宙 更新时间:2023-11-04 01:40:30 25 4
gpt4 key购买 nike

我在使用这个程序时遇到了一些问题。我想我几乎是正确的,除了它会在屏幕上打印垃圾 :(

#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("%c \n", cur->fname);
cur=cur->next;
}

return;
}

最佳答案

快退一步;我想根据我从您的代码中看到的内容提出一些通用的编程指南:

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));

适用于复杂数据结构的记录上的 insert() 例程通常不被期望/允许/不希望执行用户交互;您将用户界面内部业务逻辑 混合在一起。 (虽然 业务逻辑 是一个 high-falutin 短语,但我不知道更好的说法是“您的程序必须做的事情才能证明其存在”或“程序的基本要求必须满足”。欢迎提出替换建议。:)

将此伪代码视为替换算法:

while we need more characters
prompt user for another character
store character in datastructure
print datastructure in reverse

数据结构的所有代码与与人的交互分开。 (这种表示与逻辑的分离通常形式化为 Model View Controller ,但重要的是要认识到它仅限于用户界面——您希望您的堆栈、列表或队列在您的下一个编程项目中有用,所以构建在堆栈、列表或队列上操作的通用例程,您可以在下一个项目中重用它们。)


更新

Write a program that creates a linked list of 10 characters, then creates a copy of the list in reverse order. The user should be prompted to input the characters and the program should have a print function that prints out the original list and then prints out the list in reverse order

现在这个更像它了。虽然我很欣赏你的老师正在尝试做的事情,但链表并不是我为这个问题选择的数据结构。 (如果问题大小是有界,我会选择一个数组,如果问题大小是无界的,我会选择一个堆栈。)它可以用链表解决,并且立即想到三种可能的方法:

  • 编写一个像这样工作的递归输出函数:

    void print_output(RECORD *r) {
    if this is the last RECORD in the chain
    print the data
    else
    print_output(next record in the chain)
    }

    这使用了 call stack反转输出。巧妙的技巧,但与其他方法相比有时会浪费内存。

  • 使用双向链表元素编写列表。同时使用 nextprev 指针,并仔细管理它们以允许您在任一方向遍历列表。这需要精巧的编码和仔细的思考。或者从已发布的资源(例如 Knuth 或您最喜欢的算法文本)中复制正确的操作顺序。 :)

  • 实际上 reverse your singly-linked list .还需要微妙、仔细的编码或深思熟虑的复制。 :)

关于C编程-输入3个字符并逆序打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6209414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com