您的位置:首页 > 其它

8.8 输入一个4位数字,要求输出这4个数字字符,但每两个数字间插入一个输入的字符。如输入“1990”,插“W”,应输出“1W9W9W0"。”(改)

2016-08-10 23:35 477 查看
8.8 输入一个4位数字,要求输出这4个数字字符,但每两个数字间插入一个输入的字符。如输入“1990”,插“W”,应输出“1W9W9W0"。”(改)

纠结了将近一星期,其中还是用了“技术问答”,http://ask.csdn.net/questions/275108,感谢“StopZone”的热心回答。

StopZone

    StopZone   2016.08.10 23:08

    已采纳

puts(char *) 的输出格式是遇到'\0' 结束输出,s2所指向的字符串末尾没有'\0',所以就把非法内存的东西输出出来了。

我在纸上也推出了结果。这个程序比答案书上的好理解,没有按照原题的要求使用函数。但是想改为函数是分分钟的问题。我认为我写的比答案书上的更容易理解。

#include<stdio.h>//8.8 输入一个4位数字,要求输出这4个数字字符,但每两个数字间插入一个输入的字符。如输入“1990”,插“W”,应输出“1W9W9W0"。”(改)
int main()
{
char s1[4],s2[7],c;
int i,j;
printf("请输入s1:");
gets(s1);
printf("*****s1输入成功*****\n");
puts(s1);
printf("\n");
printf("请输入要插入的字符:");
scanf("%c",&c);
fflush(stdin);
printf("*****要插入的字符c输入成功*****\n");
printf("%c\n",c);
printf("\n");
for(i=0,j=0;i<=4;i++,j++)
{
s2[j]=s1[i];
s2[j+1]=c;
j++;
}
printf("*****c字符插入s2字符串成功*****\n");
for(i=0;i<7;i++)
{
printf("%c",s2[i]);
}
printf("\n");
for(i=0;i<7;i++)
{
printf("s2[%d]=%c ",i,s2[i]);
}
printf("\nputs()输出:");
puts(s2);
return 0;
}
结果如下图:



结果还有问题,用puts()函数输出的多输出了个W。应输出“1W9W9W0"。

我想出答案了,当i=4时,j等于了8,s2[j+1]=c导致对s2[8]进行了赋值,系统又自动在s2[8]的后边加上了'\0'。所以导致输出“1W9W9W0W”。更改如下:

#include<stdio.h>//8.8 输入一个4位数字,要求输出这4个数字字符,但每两个数字间插入一个输入的字符。如输入“1990”,插“W”,应输出“1W9W9W0"。”(改)
int main()
{
char s1[4],s2[7],c;
int i,j;
printf("请输入s1:");
gets(s1);
printf("*****s1输入成功*****\n");
puts(s1);
printf("\n");
printf("请输入要插入的字符:");
scanf("%c",&c);
fflush(stdin);
printf("*****要插入的字符c输入成功*****\n");
printf("%c\n",c);
printf("\n");
for(i=0,j=0;i<=4;i++,j++)
{
s2[j]=s1[i];
j=j+1;
s2[j]=c;
if(j>=7)//j的最大值为7
{
j=7;
s2[j]='\0';
}
}
printf("*****c字符插入s2字符串成功*****\n");
for(i=0;i<7;i++)
{
printf("%c",s2[i]);
}
printf("\n");
for(i=0;i<7;i++)
{
printf("s2[%d]=%c ",i,s2[i]);
}
printf("\nputs()输出:");
puts(s2);
return 0;
}


结果如下:



完美解决。主要是通过如下代码,控制“  s2[7]='\0'  ”。

for(i=0,j=0;i<=4;i++,j++)
{
s2[j]=s1[i];
j=j+1;
s2[j]=c;
if(j>=7)//j的最大值为7
{
j=7;
s2[j]='\0';
}
}

以下是函数的方法:

#include<stdio.h>//8.8 输入一个4位数字,要求输出这4个数字字符,但每两个数字间插入一个输入的字符。如输入“1990”,插“W”,应输出“1W9W9W0"。”(函数的方法)
void ChaRuZiFu(char s1[],char s2[])//插入字符函数
{
char c;
int i,j;
printf("请输入要插入的字符:");
scanf("%c",&c);
fflush(stdin);
printf("*****要插入的字符c输入成功*****\n");
printf("%c\n",c);
printf("\n");
for(i=0,j=0;i<=4;i++,j++) { s2[j]=s1[i]; j=j+1; s2[j]=c; if(j>=7)//j的最大值为7 { j=7; s2[j]='\0'; } }
printf("*****c字符插入s2字符串成功*****\n");
for(i=0;i<7;i++)
{
printf("%c",s2[i]);
}
printf("\n");
for(i=0;i<7;i++)
{
printf("s2[%d]=%c ",i,s2[i]);
}
printf("\nputs()输出:");
puts(s2);
}

int main()
{
char s1[4],s2[7];
printf("请输入s1:");
gets(s1);
printf("*****s1输入成功*****\n");
puts(s1);
printf("\n");
ChaRuZiFu(s1,s2);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐