2 qq 32016019 qq_32016019 于 2016.04.15 09:38 提问

数据结构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个回答

qwe125698420
qwe125698420   2016.04.15 11:27

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

qwe125698420
qwe125698420   2016.04.15 12:05

意思就是这样:
printf("字符串输入:");
getchar();//这行加上去

qq_32016019
qq_32016019 谢谢,真的很感谢,
一年多之前 回复
herozhangbz
herozhangbz   2016.04.15 12:23

你的InitStr函数有问题,

    for(i=0;i<n;i++) {
      ch=getchar();
      p->c[i]=ch;
      p->n=p->n+1;
     }

调试的时候发现i=0的时候没有有效执行

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!