简单的C语言改错

来源:百度知道 编辑:UC知道 时间:2024/06/03 23:01:55
//输入一个长度不超过80的字符串,编写程序,删除其中所有的数字字符
#include<stdio.h>
#include<string.h>
#define MAX 80
void main()
{
char in[MAX];
int count = 0;
int i =0,j,flag;
scanf("%s",in);
count = strlen(in);
for( i=0;i<count;i++)
{
if(in[i]>='0'&&in[i]<='9')
{
do
{
flag = i;
in[flag]=in[flag+1];
flag++;

}while(in[flag]=='\0');
}
} printf("%s\n",in);

printf("%d",count);
}
输出有问题,请大侠帮助
应该怎么改呢?

do
{
flag = i;
in[flag]=in[flag+1];
flag++;

}while(in[flag]=='\0');
你这里。意思是如果有数字。那么让该元素=后面的元素。
可是如果后面的元素是字母。那么他还是会执行输出的。就会出现原本数字的那个位置输出后一个位的字母。但是后一个位依旧输出本来的字母。 帮你改一下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
main()
{char str[80],str2[80];
int i,j;
gets(str);
for(i=0,j=0;str[i]!='\0';i++)
if(!(str[i]>='0'&&str[i]<='9'))
{str2[j]=str[i];
j++;
}
puts(str2);
system("pause");
}

这个程序感觉怪怪的,
do...while(in[flag]=='\0');这段我想是用来移动字符去除数字的,那应该是未到结尾('\0'),继续...应该是while(in[flag]!='\0');

还有每次移位去除一个数字后,串长度是减少的,但是for( i=0;i<count;i++)
中count是不变的,循环到最后超出串的边界了

scanf("%s",&in);

while里的==改成!=,因为当没有到字符串尾时应继续循环do里内容,而只有当while为假时才退出循环.