| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 578 人关注过本帖, 1 人收藏
标题:不知道怎么回事,各位帮忙看看
取消只看楼主 加入收藏
obstratiker
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:198
专家分:758
注 册:2011-5-5
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:3 
不知道怎么回事,各位帮忙看看
我想写一个简单链表,直接上程序吧,在注释中标明问题
程序代码:
#include <stdio.h>
#include <stdlib.h>

struct node
{
    char a;
    struct node *next;
};

void printList(struct node *Tou)
{
    struct node *h1=Tou;
    while(h1->next!=NULL)
    {
        h1=h1->next;
        printf("%c --> ",h1->a);
    }
    printf("NULL\n\n");
}

void insert(struct node *Tou)
{
    struct node *h1=Tou,*h2=(struct node *)malloc(sizeof (struct node));
    printf("Enter a character:");
//    int n;                                                //非得加上这两句,把'\n'消除了才能输入h2->a……非常不解
//    scanf("%d",&n);                                       
    scanf("%c",&h2->a);                                    //如果不加上上面两句,在运行时这句就会直接跳过,给h2->a赋的值是'\n'
    h2->next=NULL;
    while(h1->next!=NULL)
        h1=h1->next;
    h1->next=h2;
    printList(Tou);
}


int main(void)
{
    printf("Enter your choice:\n"
        "1 to insert an element into the list.\n"
        "2 to delete an element from the list.\n"
        "3 to end.\n? ");
    int n;
    scanf("%d",&n);                                                        //我在想原因就是在这输入n时,还有一个'\n'在输入流中,影响了后面的输入,为什么会这样呢……
    struct node *Tou=(struct node *)malloc(sizeof (struct node));
    Tou->a=0;
    Tou->next=NULL;
    while(n!=3)
    {
        switch(n)
        {
            case 1:
                insert(Tou);
                break;
        }
        printf("? ");
        scanf("%d",&n);
    }
    return 0;
}
请大家看看,谢啦
搜索更多相关主题的帖子: next 
2012-08-14 19:19
obstratiker
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:198
专家分:758
注 册:2011-5-5
收藏
得分:0 
回复 2楼 dsl975708035
为什么我用scanf()会遗留一个回车?
以前都没碰到这样的事儿
2012-08-14 19:47
obstratiker
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:198
专家分:758
注 册:2011-5-5
收藏
得分:0 
回复 5楼 dsl975708035
以前怎么没有多次输入scanf,多了去了
这个现象还是第一次
2012-08-14 20:10
obstratiker
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:198
专家分:758
注 册:2011-5-5
收藏
得分:0 
以下是引用dsl975708035在2012-8-14 20:11:31的发言:

#include  
#include  
 
int main(void)
{
    int a;
    printf("Input");
    scanf("%d",&a);
    printf("a");
    scanf("%d",&a);
    return 0;
}
我用这段代码来模拟该问题,你看是不是缺了什么
我明白了,哈哈
你这段代码连续两次输入时没有问题的,但是如果换成
程序代码:
int main(void)
{
    char a;
    printf("Input");
    scanf("%c",&a);
    printf("%c",a);
    scanf("%c",&a);
    return 0;
}
就会直接跳过第二次scanf(),是因为转换符的原因!~
%d的时候系统没把'\n'看成数字(没法识别),所以回车保留在输入流中没事儿
但如果%c的时候,第一次进行scanf(),就是遗留一个'\n'在输入流中,然后第二次scanf()
系统直接认为'\n'是一个字符,所以就直接输入了!~
2012-08-14 20:22
快速回复:不知道怎么回事,各位帮忙看看
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.041387 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved