编写函数fun,其功能是:将ss所指字符串中所有下标为奇数位上的字母转换为大写(若该位置上不是字母,则不转换)。 例如 若输入“abc4EFg”,则应输出“aBc4EFg”。
#include<stdio.h>
#include<string.h>
void fun (char *ss)
***************found***************
{
}
************found****************
main( )
{ char tt[81];
void NONO( );
printf("\nplease enter an string within 80 character:\n");
gets(tt);
printf("\n\nAfter changing , the string\n\"%s\" ",tt);
fun(tt);
printf("\nbecomes\n\"%s\"\n",tt);
NONO( );
}
void NONO( )
{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/
FILE *fp, *wf;
char tt[81];
int i;
fp=fopen("in.dat","r");
wf=fopen("out.dat","w");
for(i=0;i<10;i++)
{fscanf(fp,"%s",tt);
fun(tt);
fprintf(wf,"%s\n",tt);
}
fclose(fp);
fclose(wf);
}
答案: void fun(char *ss)
{
int i ;
for( i=0 ; ss[i] !='\0' ; i++) /*将ss所指的字符串中所有下标为奇数位置的字母转换成大写*/
if(i%2==1 && ss[i]>='a' && ss[i]<='z')
ss[i]=ss[i] - 32;
}
我自己做的和答案不大一样 :
void fun (char *ss)
{
while(ss!=0)
{for(;*(ss+1)<='z' && *(ss+1)>='a' ;)
{*ss=*ss-'a'+'A';ss+=2;}
}
}
然后在运行的时候 就停留在 main函数中 After changing , the string 与输出我原来已经输入过的字符串 那一句了, 按下什么键也退不出 运行的黑色窗口。。。。。。。
我的程序到底哪里出了问题了,请高手详细指点。
为什么会出现退不出的情况,是产生死循环了么?? 应怎样修改????????
void fun(char *ss)
{
int i;
char *p=ss;
for(i=0;*p!='\0';p++,i++)
if(i%2&&*p<='z'&&*p>='a')*p-=32;/*ä¸æ å¥æ°ä½ä¸ä¸ºå°ååæ¯*/
}
while(ss!=0)
中诶一行的意思是如果 ss 不等于 0 的话,就一直继续下去。
也就是说,你输入 0 的时候,程序正常运行。
如果输入 0 意外的文字或者数字的话,那就一直 while 下去了。
应该写成,
while(ss != '\0')