问题描述
- 数据结构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]);
}
运行结果,最后一个字符总是输不出来,救救小白!!!
解决方案
printf("初始后的元素输出:");有换行吗?没有。所以,你第一个getchar()读入的是回车。在scanf()输入4的时候,你是输入了4后按了下回车。
这时候回车依然留在了输入流中,当你输入ghjk的时候,实际在输入流中的是 nghjk 这五个键,第一个是回车,所以最后一个错了。只需要在scanf输入后加个getch();即可解决
解决方案二:
意思就是这样:
printf("字符串输入:");
getchar();//这行加上去
解决方案三:
你的InitStr函数有问题,
for(i=0;i<n;i++) {
ch=getchar();
p->c[i]=ch;
p->n=p->n+1;
}
调试的时候发现i=0的时候没有有效执行
时间: 2024-10-03 01:09:40