新手求大神指点一上这程序,是字符串倒置的程序
新手求大神指点一下这程序,是字符串倒置的程序,
#include<stdio.h>
void main()
{
char a[20],*p,*q,t;
int i,m,n;
printf("输入n的值\n");
scanf("%d",&n);
printf("输入字符串\n");
for(i=0;i<n;i++)
scanf("%c",&a[i]);
printf("\n");
p=a;
q=(a+n);
if(n%2==0)
m=n/2;
else m=n/2-1;
for (i=0;i<=m;p++,q--,i++)
{t=*q;*q=*p;*p=t;}
for(i=0;i<n;i++)
printf("%c",a[i]);
printf("\n"); }
------解决思路----------------------
主要问题是在输入整数后我们一般后接一个空格或回车,但该空格或回车还停留在输入区造成的问题.
另一个问题在程序设计的问题,输入字符串可以用scanf("%s", str),这样子方便啊
如果想要字符串中能有空格,就可以用gets(str)
或fgets(s, size, stdin);// 注意回车也算是字符串的有效字符
------解决思路----------------------
没细看代码,看二楼说的问题。
解决:输入n后加一个fflush(stdin);(貌似是这个),清空输入缓冲区。
#include<stdio.h>
void main()
{
char a[20],*p,*q,t;
int i,m,n;
printf("输入n的值\n");
scanf("%d",&n);
printf("输入字符串\n");
for(i=0;i<n;i++)
scanf("%c",&a[i]);
printf("\n");
p=a;
q=(a+n);
if(n%2==0)
m=n/2;
else m=n/2-1;
for (i=0;i<=m;p++,q--,i++)
{t=*q;*q=*p;*p=t;}
for(i=0;i<n;i++)
printf("%c",a[i]);
printf("\n"); }
------解决思路----------------------
主要问题是在输入整数后我们一般后接一个空格或回车,但该空格或回车还停留在输入区造成的问题.
另一个问题在程序设计的问题,输入字符串可以用scanf("%s", str),这样子方便啊
如果想要字符串中能有空格,就可以用gets(str)
或fgets(s, size, stdin);// 注意回车也算是字符串的有效字符
#include<stdio.h>
void main()
{
char a[20],*p,*q,t;
int i,m,n;
printf("输入n的值\n");
scanf("%d",&n);
// 上面输入数字之后后面的空格或回车键还停留在输入缓冲区,
// 它会作为下面输入字符的第一个字符,要跳过这个回车,加上
getchar(); // 紧跟n后面的一个字符(回车或空格什么, 注意只有一个,)
// 所以输入整数后输入太多空格或回车还是会有问题
printf("输入字符串\n");
for(i=0;i<n;i++)
scanf("%c",&a[i]);
printf("\n");
// 你这个是没有结束符的字符串,建议加上,n不要越界
a[n] = '\0';
p=a;
q=a+n - 1; // n个字符最后一个是加上n-1
for ( ; p < q; p++, q--) { // 这么写简练多了
t = *p;
*p = *q;
*q = t;
}
// 有结束符的字符串这样子输出
printf("%s\n", a);
}
------解决思路----------------------
没细看代码,看二楼说的问题。
解决:输入n后加一个fflush(stdin);(貌似是这个),清空输入缓冲区。