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


#include 
#include 
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
请按任意键继续. . .
想问一下哪里错了

参考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;
}

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

要用大于等于和小于等于啊
第8行getchar()删掉

 
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main(){
    int i=0,zf=0,sz=0,fh=0;
    char a[1000]={0};
    printf("请输入一组以'#'结尾的字符:\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);
    system("pause");
    return 0;
}

你的数组根本没用到

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