永发信息网

建立单个字符的单链表,输入语句会被跳过。

答案:2  悬赏:80  手机版
解决时间 2021-02-04 05:51
  • 提问者网友:龅牙恐龙妹
  • 2021-02-03 17:49
#include
#include
#include
struct character
{
int count;
char ch;
struct character *next;
};
bool flag = true;
char tmp;
struct character *creat_list()
{
printf("函数体内\n");
struct character *p1,*p2,*head;
p1=p2=(struct character *)malloc(sizeof(struct character));
tmp=getchar();
printf("函数体内输入之后\n");
p1->ch=tmp;
p1->count = 1;
head=NULL;
printf("打印p1->ch=%c\n",p1->ch);
while(p1->ch!='0')
{
printf("函数体内循环\n");
if(flag)
{
head=p1;
flag=false;
}
else
{
p2->next=p1;
}
p2=p1;
printf("打印p2->ch=%c\n",p2->ch);
p1=(struct character *)malloc(sizeof(struct character));
printf("下面进行输入\n");
tmp=getchar();
printf("输入完毕\n");
}
p2->next=NULL;
return head;
}
void main()
{
struct character *pt;
pt=creat_list();
while(pt!=NULL)
{
printf("%c\n",pt->ch);
pt=pt->next;
}
}
再循环内的输入会被跳过。为什么。
printf("下面进行输入\n");
tmp=getchar();
printf("输入完毕\n");
最佳答案
  • 五星知识达人网友:风格不统一
  • 2021-02-03 18:52
当您先输入一个字符串回车后,注意这个回车,它会输入一个换行符(这个换行符对应ASCII码的十进制是10),而这个换行符会直接输送给scanf("%c",&x)这个语句,所以当您回车过后不仅字符串s已经赋值,字符x也赋值了,x变量的十进制值是10,你可以加入语句printf("%d",x)查看x所得到的值确实是10。
所以您要避免这种情况发生,可以这样写:
scanf("%s",s);
scanf("%c",&x);//此语句接收换行符
scanf("%c",&x);//此语句接收你真正要输入的字符
全部回答
  • 1楼网友:由着我着迷
  • 2021-02-03 19:21
虽然我很聪明,但这么说真的难到我了
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯