首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从用户链接列表中扫描字符

从用户链接列表中扫描字符
EN

Stack Overflow用户
提问于 2021-05-11 08:22:22
回答 1查看 74关注 0票数 1

我应该编写一个函数,从用户扫描输入,直到输入并将其输入到链接列表。我不能把它扫描成字符串,也不能把它放在列表中。

我编写了这段代码,没有将字符输入到链接列表中,直到我按Exit才从控制台退出。

代码语言:javascript
复制
typedef struct chNode
{
    char data;
    struct chNode *next;
}chNode;


chNode * createCharList(char data)
{
    chNode *temp = (chNode*)malloc(sizeof(chNode));
    temp->data = data;
    temp->next = NULL;
    return temp;
}

chNode * addCharToLast(chNode *head, char data)
{
    chNode *p = head;
    chNode *temp = createCharList(data);
    if (head == NULL)
        return temp;
    while (p->next != NULL)
        p = p->next;
    p->next = temp;
    return head;
}


chNode* insert_Charlist() 
{
    char ch;
    chNode *Head = NULL;
    printf("Enter chars For Linked-List Till 'Enter':\n");
    scanf_s("%c", &ch);
    while (ch != '\n')
    {

        Head = addCharToLast(Head, ch); 
        scanf_s("%c", &ch);
        
    }
    return Head;
}

void main()
{

    chNode *Orignial_list = NULL;
    Orignial_list = insert_Charlist(); // Function that imports a list
    printf("You Entered This linked-list:\n");
    printf_CharList(Orignial_list); //Printing the linked list
    
    getch();

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-11 08:44:26

为了这次的召唤

代码语言:javascript
复制
scanf_s("%c", &ch);

您需要再指定一个参数

代码语言:javascript
复制
scanf_s( "%c", &ch, 1 );

使用函数insert_Charlist调用函数addCharToLast的实现方法效率低下,因为每次向列表中添加新字符时,函数addCharToLast都会遍历整个列表。

我可以建议下面的函数实现,如下面的演示程序所示。

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

typedef struct chNode
{
    char data;
    struct chNode *next;
} chNode;

chNode * createNode(char data )
{
    chNode *temp = (chNode*)malloc( sizeof( chNode ) );
    
    if ( temp != NULL )
    {
        temp->data = data;
        temp->next = NULL;
    }
    
    return temp;
}

size_t insert_Charlist( chNode **head ) 
{
    while ( *head ) head = &( *head )->next;
    
    size_t n = 0;
    
    printf( "Enter chars For Linked-List Till 'Enter': " );

    for ( int data; ( data = getchar() ) != EOF && 
                    data != '\n' && 
                    ( *head = createNode( data ) ) != NULL; )
    {
        head = &( *head )->next;
        ++n;
    }
    
    return n;
}

void printf_CharList( const chNode *head )
{
    for ( ; head != NULL; head = head->next )
    {
        printf( "%c -> ", head->data );
    }
    
    puts( "null" );
}

int main(void) 
{
    chNode *head = NULL;
    
    insert_Charlist( &head );
    
    printf_CharList( head );
    
    return 0;
}

程序输出可能类似于

代码语言:javascript
复制
Enter chars For Linked-List Till 'Enter': Hello
H -> e -> l -> l -> o -> null

注意,根据C标准,不带参数的函数main应声明为

代码语言:javascript
复制
int main( void )
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67483010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档