c语言,要求编一个程序,输入一串字符串,要求将其中的数字放入另一个字符串中并输出,输入a1,输出1.

然后,这是我刚开始编的程序
#include<stdio.h>
void main()
{
char a[10];
char b[10],i,j=0;
gets(a);
for(i=0;i<10;i++)
{
if(a[i]>='0'&&a[i]<='9')
{b[j]=a[i];j++;}
if(a[i]=='\n')break;
}
printf("%s",b);
}
但,得出的结果除了应该正确输出的数字外,后面还会跟“烫烫烫+原输入的字符”,可我printf的只有数组b啊,那些字符怎么出现的,问了老师,老师讲对b数组的字符定义改为整形,即 int b[10],其他不变,
#include<stdio.h>
void main()
{
char a[10];
int b[10],i,j=0;
gets(a);
for(i=0;i<10;i++)
{
if(a[i]>='0'&&a[i]<='9')
{b[j]=a[i];j++;}
if(a[i]=='\n')break;
}
printf("%s",b);
}
可结果虽然没了那些乱字符,但输出的只有第一个数字,也就是循环没有进行,可是循环体没改啊?请大家帮帮,没多少分。。谢谢了

#include<stdio.h>
void main()
{
char a[10];
char b[10],i,j=0;
gets(a);
for(i=0;i<10;i++)
{
if(a[i]>='0'&&a[i]<='9')
{b[j]=a[i];j++;}
if(a[i]=='\n')break;
}
b[j]='\0'; //结束标记就可以了
printf("%s\n",b);
}

问题二

#include<stdio.h>
void main()
{
char a[10];
char b[10]; //这里应该是char
int i,j=0;
gets(a);
for(i=0;i<10;i++)
{
if(a[i]>='0'&&a[i]<='9')
{b[j]=a[i];j++;}
if(a[i]=='\0')break;
}
b[j]='\0'; //这里用结束标记
printf("%s",b);
}追问

为什么定义为整形就不循环呢?

追答

不是定义int就不循环,你要一个一个打印出来才是,,,下边改正
#include
void main()
{
char a[10];
int b[10],i,j=0;
gets(a);
for(i=0;i='0'&&a[i]<='9')
{b[j]=a[i]-'0';j++;}
if(a[i]=='\n')break;
}
for(i=0;i<j;i++)
printf("%d",b[i]);
}

追问

定义为整形,数组b就不能按字符串输出了吗?还有,能麻烦解释下定义为字符型时,为什么最后输出时会出现那些乱的字符?谢谢了!

追答

%s 只能是输出字符串
乱码是你没初始化,你把他输出就会出现乱码,你只要设置结束标记就可以了

温馨提示:答案为网友推荐,仅供参考
相似回答