2301_77100479 2023-03-19 15:24 采纳率: 60%
浏览 46

输入一串以#结尾的字符,求其中字母数字及符号的个数


#include <string.h>
#include <stdio.h>
int main(){
    int i=0,zf=0,sz=0,fh=0;
    char a[1000]={0};
    printf("请输入一组以'#'结尾的字符:\n");
    getchar();
    i=0;
    while((a[i]=getchar())!= '#'){    
        if((a[i]>'a' && a[i]<'z') || (a[i]>'A' && a[i]<'Z')){
            zf=zf+1;
        }
        else if(a[i]>'0' && a[i]<'9'){
            sz=sz+1;
        }
        else{
            fh=fh+1;
        }
        i+=1;
    }
    printf("数字:%d字符:%d符号:%d",sz,zf,fh);
    return 0;
}

运行结果:
请输入一组以'#'结尾的字符:
35Abv,#
数字:1字符:2符号:2


Process exited after 6.964 seconds with return value 0
请按任意键继续. . .
想问一下哪里错了

  • 写回答

4条回答 默认 最新

  • 追cium 2023-03-19 15:30
    关注

    参考GPT和自己的思路:

    根据你提供的代码和运行结果看,程序的逻辑并没有问题。但是你在输入字符前使用了getchar(),这会将输入缓冲区的第一个字符(换行符)取出,这样就会导致输入字符不完整,程序无法正确统计字符、数字和符号的个数。

    所以,正确的做法是在获取输入字符前先清空输入缓冲区,可以使用fflush(stdin)或者循环读取输入缓冲区中的字符直到换行符,代码修改如下:

    #include <string.h>
    #include <stdio.h>
    int main(){
        int i=0,zf=0,sz=0,fh=0;
        char a[1000]={0};
        printf("请输入一组以'#'结尾的字符:\n");
        fflush(stdin); // 清空输入缓冲区
        // 或者循环读取输入缓冲区中的字符直到换行符
        // while(getchar()!='\n');
        i=0;
        while((a[i]=getchar())!= '#'){
            if((a[i]>'a' && a[i]<'z') || (a[i]>'A' && a[i]<'Z')){
                zf=zf+1;
            }
            else if(a[i]>'0' && a[i]<'9'){
                sz=sz+1;
            }
            else{
                fh=fh+1;
            }
            i+=1;
        }
        printf("数字:%d字符:%d符号:%d",sz,zf,fh);
        return 0;
    }
    

    这样就可以正确统计字符、数字和符号的个数了。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月19日