托马斯奎 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();即可解决

    评论

报告相同问题?

悬赏问题

  • ¥20 C# TCP服务端,客户端退出后,不断有数据进来
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 路易威登官网 里边的参数逆向
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?