#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;
}