C语言程序问题。求大神帮忙改一下啊。

2025-03-29 01:19:46
推荐回答(3个)
回答1:

#include

#include

main()

{

int i,k=0;

char s[7],a[8],b[5];

gets(s);

for(i=0;i<2;i++){

if(s[i]>='A'&&s[i]<='Z')

a[i]=s[i];

}

a[2]=0;


for(;i<6;i++)

{

if(s[i]>='0'&&s[i]<='9')

b[k++]=s[i];

}

b[4]=0;


strcat(a,b);//把b数组追加到a数组结尾,a末尾的'\0'自动被删除,并返回a地址

printf("%s",a);


}



你没有弄明白循环嵌套是如何运行的,另外你忘了字符串最后总是有一个'\0'的,'\0'的ascii是0

循环嵌套,必须是外循环执行一次,内循环全部执行完,才执行第二次外循环,然后内循环继续执行完,在执行第三次外循环,以此类推


就以你写的来说

你写的大体格式如下

while(){

for()

for()

}

这样一来,就先判断while循环条件,如果为真,则执行一次while内的语句,

现在开始执行while内语句了,第一个for全部循环玩,在执行第二个for,第二个全执行完,再次回到while的判断条件,如果为真,继续上述执行规则,


因此你的while是多余的, 另外要记住,一个字符串最后一个字符总是/0, 还有就是你的数组开太大了,根本用不上 就造成了资源上的浪费,虽然本程序没什么大小可谈,但是这个习惯要改,因为在将来做大型程序的时候 这点很重要 还有什么问题 可以继续追问

回答2:

#include 
#include 

int main() {
int i = 0, j = 0, k = 0;
char s[81], alab[81], alpha[81];
printf("请输入字符串: ");
gets(s);
for (i = 0; i < 2; i++) {
if (s[i] >= 'A' && s[i] <= 'Z') {
alpha[j++] = s[i];
}
}
alpha[j++] = 0;
for (i = 2; i < 6; i++) {
if (s[i] >= '0' && s[i] <= '9') {
alab[k++] = s[i];
}
}
alab[k++] = 0;
printf("%s%s\n", alpha, alab);
}

回答3:

不明白 为什么使用 while(s[i]) i都没有初始化,根本不知道i是多少?那么s[i]代表什么意思呢?
如果i=-1 s[-1] 是个啥?

你的叙述中,是输入一个ID,然后判断ID是否合法,为什么使用 循环套循环的方式,while有必要吗?两个for不就判断出来了。

合法就是合法,不合法就是Error,没有见到程序中有提示ERROR的信息。另外,合法了为什么还要复制到另一个数组中,?题目中还有别的要求??