C语言初学者,两个问题望各位大佬解答 30
问题1。为什么下面这个代码,按回车#include<stdio.h>intmain(void){chara[3];intb,c,d,e,i=0;b=c=d=e=0;get...
问题1。为什么下面这个代码,按回车#include<stdio.h>int main(void){char a[3];int b,c,d,e,i=0;b=c=d=e=0;gets(a);printf("123456789");for(i=0;i<3;i++){while(a[i]=='\0'){printf("数字一共有:%d",b);printf("字母一共有:%d",c);printf("空格一共有:%d",d);printf("其他字符一共有:%d",e);return 1;}while(a[i]!='\0'){if(a[i]>='0'&&a[i]<='9'){b++;}else if(a[i]>='a'&&a[i]<='z'||a[i]>='A'&&a[i]<='Z'){c++;}else if(a[i]==' '){d++;}else{e++;}}}printf("数字一共有:%d",b);printf("字母一共有:%d",c);printf("空格一共有:%d",d);printf("其他字符一共有:%d",e);return 0;}不能出来东西,就一直卡在那了,gets把语句读了进去啊,详细见图问题二:下面这个代码为什么运行的时候第二句自动读了,详细如图#include<stdio.h>#include<string.h>int main(void){int i,a,b,c,d,e;char h[3];a=b=c=d=e=0;for(i=0;i<3;i++){printf("第%d句\n",i);scanf("%c",&h[i]);/*if(h[i]>='A'&&h[i]<='Z'){a++;}else if(h[i]>='a'&&h[i]<='z'){b++;}else if(h[i]>='0'&&h[i]<='9'){c++;}else if(h[i]==' '){d++;}else{e++;}*/printf("big一共有:%d\n",a);printf("small一共有:%d\n",b);printf("数字一共有:%d\n",c);printf("空格一共有:%d\n",d);printf("其他字符一共有:%c\n",e);}}实在想不出来了,希望各位大佬能够解答
展开
1个回答
展开全部
这两个代码共同的问题:
字符串只有三个字符, 很容易越界, 应该大一些,char a[3];改成char a[100];第二个的char h[3]; 一样.
另外, ;for(i=0;i<3;i++)这个要做什么用?输入三行吗? 如果是,那么不要和里面的i一样控制.
第一个代码,
第一个while循环没意义, 除非空串,否则循环不会执行.
第二个循环,没有改变i值, 导致死循环.
第二个代码其实是读入三个字符,而不是三句.
按照读三句, 每次分别统计个数的, 把第一个修改成这样:
#include<stdio.h>
int main(void)
{
char a[300];
int b,c,d,e,j,i;
printf("123456789");
for(j=0;j<3;j++)
{
b=c=d=e=0;
gets(a);
i = 0;
while(a[i]!='\0')
{
if(a[i]>='0'&&a[i]<='9')
{
b++;
}
else if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z'))
{
c++;
}
else if(a[i]==' ')
{
d++;
}
else
{
e++;
}
i++;
}
printf("数字一共有:%d",b);
printf("字母一共有:%d",c);
printf("空格一共有:%d",d);
printf("其他字符一共有:%d",e);
}
return 0;
}
更多追问追答
追问
我之所以写的很小是因为怕想要减少循环的次数 然后我不太懂什么叫越界,还有就是那个会死循环呢?
还有我这个while不是没有意义的,我这个while是为了防止他把\0当成特殊符号读了进去
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询