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);}}实在想不出来了,希望各位大佬能够解答 展开
 我来答
风若远去何人留
2017-12-29 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450114
专业C/C++软件开发

向TA提问 私信TA
展开全部

这两个代码共同的问题:

字符串只有三个字符, 很容易越界, 应该大一些,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当成特殊符号读了进去
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式