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

数据结构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 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog