#include<string.h>#include<stdio.h>main(){char c; int w=0,x=0,y=0,z=0; while((c=getchar())!='\n') {if((c>='a'&& c<='z')||(c>='A' && c<='z')) w++; else if (c==' ') x++; else if (c>='0' && c<='9') y++; else z++; } printf("w=%d,x=%d,y=%d,z=%d",w,x,y,z);}这个程序运行是对的,但我有点看不明白题目是输入一行字符,程序中c=getchar()是单个字符输入呀!应该改成c=gets()请高手指点。
可以这样理解当你在键盘输入的时候程序已经开始运行了当输入第一个字符的时候,程序已经开始判断了输入以后 程序判断结束 变量自加完毕输入第二个的时候 重复上面的程序操作当遇到换行的时候 循环结束当输入一行字符的时候getchar()会每个字符每个字符的进行获取 知道获取到换行符的时候循环才结束如果还有什么疑问 可以加我百度hi pengxuewanp
c=getchar()确实是单个字符输入,但是他是放在while循环中的,所以具体的实现就是一个字符一个字符的读入,直到读到回车'\n'结束循环,在进行字符的读入时,分析也就完成了。这样比c=gets() ,先全部读入再一个个分析的效率要高
#include "stdio.h" void main() { char s; int i=0,j=0,k=0,m=0,da=0,xiao=0; printf("please input the string\n"); while((s=getchar())!='\n') /*循环从键盘读入字符直到一行结束(输入回车)*/ { if((s='a')||(s'A')) { if(s='A')da++; if(s='a')xiao++; i++; /*i存入字母数*/ } else if(s==' ') j++; /*j存入空格数,注意s==' '里面是有一个空格的*/ else if(s47)k++; /*k存入数字数*/ else m++; /*m存入其它符号数*/ } printf("char:%d Capital letters:%d Lowercase%d\nspec:%d\nnumber:%d\nOther:%d\n",i,da,xiao,j,k,m); /*打印行中的字母,空格,数字,其它字符数*/ }
你输入为'\n'后还进行了一次循环并将qita加1,改成这样while(1){scanf("%c",&_q);if(_q=='\n')break;elseif(_q>='A'&&_q<='Z'||_q>='a'&&_q<='z')zimu++;elseif(_q>='0'&&_q<='9')shuzi++;elseif(_q=='')kongge++;elseqita++;}