托马斯奎 2016-04-15 01:38 采纳率: 0%
浏览 2659

数据结构C语言字符串的输出时总是少输出最后一个字符,这是怎么回事啊?

代码如下:
#include
#include
struct SeqString
{
int MAXNUM;//字符串的最大个数
int n;//字符串的长度
char c;//存储基地址
};
typedef struct SeqString *PSeqString;
PSeqString CreatNullStr(int m);
void InitStr(PSeqString pstr);
/
***主函数****/
int main()
{
int m;
PSeqString pstr;
printf("设置字符串最大个数MAXNUM:");
scanf("%d",&m);
pstr=CreatNullStr(m);
InitStr(pstr);
return 0;
}
PSeqString CreatNullStr(int m)
{
PSeqString pstr=(PSeqString)malloc(sizeof(struct SeqString));
if(pstr!=NULL)
{
pstr->c=(char *)malloc(sizeof(char)*m);
if(pstr->c)
{
pstr->n=0;
pstr->MAXNUM=m;
return pstr;
}
else free(pstr);
}
printf("!!!");
return NULL;
}
void InitStr(PSeqString pstr)
{
int i,n;
char ch;
PSeqString p=pstr;
printf("字符串初始长度n,(注意:初始字符串长度不大于MAXNUM):\n请输入:");
scanf("%d",&n);//n表示长度
printf("字符串输入:");
for(i=0;i {
ch=getchar();
p->c[i]=ch;
p->n=p->n+1;
}
printf("初始后的元素输出:");
for(i=0;in;i++)
printf("%c",p->c[i]);
}
运行结果,最后一个字符总是输不出来,救救小白!!!
图片说明

  • 写回答

3条回答

  • 我叫睿 2016-04-15 03:27
    关注

    printf("初始后的元素输出:");有换行吗?没有。所以,你第一个getchar()读入的是回车。在scanf()输入4的时候,你是输入了4后按了下回车。
    这时候回车依然留在了输入流中,当你输入ghjk的时候,实际在输入流中的是 \nghjk 这五个键,第一个是回车,所以最后一个错了。只需要在scanf输入后加个getch();即可解决

    评论

报告相同问题?

悬赏问题

  • ¥15 安装svn网络有问题怎么办
  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献