do-while循环,统计字符个数,很简单的,帮我看一下错在那里
#include <stdio.h>
void main()
{
int a=0,b=0,c=0,d=0;
char op;
do
{
if((op> = 'a '&&op <= 'z ')||(op> = 'A '&&op <= 'Z '))
a++;
else if(op= ' ')
b++;
else if(op> = '0 '&&op <= '9 ')
c++;
else
d++;
op=getchar();
}while(op!= '\n ');
printf( "您输入的英文字母个数为%d\n ",a);
printf( "您输入的空格数为:%d\n ",b);
printf( "您输入数字个数为:%d\n ",c);
printf( "您输入其它字符个数为:%d\n ",d);
}
[解决办法]
else if(op= ' ')
应该是 else if(op == ' ')
[解决办法]
用while()
你刚开始时,op根本就没有值, 你判断个什么劲啊!
[解决办法]
这就是缺陷与陷阱里的所说的很多人都容易犯的错误。。。
[解决办法]
1: else if(op= ' ')
应该是 else if(op== ' ')
2:op=getchar();最好放在前边
[解决办法]
do-while跟while没多大区别
============
因为你的op没有赋值,所以op!= '\n ',在do-while循环中,无论你是否从键盘输入,do中的代码都首先被执行一遍,所以才会出现“其它字符个数总比输入的多1个”
[解决办法]
有空可以找个编程风格的书看看
对于if语句,我们通常把常量放到左边来避免陷阱。
if( ' ' == op)
{
...
}
[解决办法]
#include <stdio.h>
void main()
{
int a=0,b=0,c=0,d=0;
char op;
while(1)
{
op=getchar();
if(op== '\n ') break;
if((op> = 'a '&&op <= 'z ')||(op> = 'A '&&op <= 'Z '))
a++;
else if(op== ' ')
b++;
else if(op> = '0 '&&op <= '9 ')
c++;
else
d++;
}
printf( "您输入的英文字母个数为%d\n ",a);
printf( "您输入的空格数为:%d\n ",b);
printf( "您输入数字个数为:%d\n ",c);
printf( "您输入其它字符个数为:%d\n ",d);
}
[解决办法]
#include <stdio.h>
#include <iostream.h>
void main()
{
int a=0,b=0,c=0,d=0;
char op;
while(op!= '\n ')
{
op=getchar();
if((op> = 'a '&&op <= 'z ')||(op> = 'A '&&op <= 'Z '))
a++;
else if(op== ' ')
b++;
else if(op> = '0 '&&op <= '9 ')
c++;
else
{
cout < <op < <endl;
d++;
}
};
printf( "您输入的英文字母个数为%d\n ",a);
printf( "您输入的空格数为:%d\n ",b);
printf( "您输入数字个数为:%d\n ",c);
printf( "您输入其它字符个数为:%d\n ",d);
}
输出:
123456789
您输入的英文字母个数为0
您输入的空格数为:0
您输入数字个数为:9
您输入其它字符个数为:1
多出来的好象是个换行符
------解决方案--------------------
原来是你输入‘\n’后没判断它是不是 '\n ' 而是在下次循环的时候才进行的判断,
所以 '\n '也被算做了一个字符。
[解决办法]
在定义完变量之后加个
printf( "请您输入要计算的字符串: ");
scanf( "%c ",&op);
效果好点吧!但是不知道为什么op前要加这个&,为什么?什么意思?
[解决办法]
但是按我那样先给OP输入一个值,就不会有那个多的了,呵呵!想起你给解释一下“&”,这个符号的作用,老是弄不明白哪儿要,哪儿不要!谢谢了!
[解决办法]
用scanf输入的时候要
哪个是取地址符~
找本书看下 随便一本书上应该都有的
[解决办法]
我的意思是在这里直接用
while(..)
{...}
采用这种方式比较好(在键盘输入的情况下,不考虑 EOF。)
while( (op = getchar()) != '\n ') {
判断op属于何种字符
}
注意!:getchar()并不一定是从键盘读取字符的,而是从标准输入中(一般是键盘)读取,有时候输入重定向了(定向到一个文件),getchar()会从文件读取字符的,这个时候要考虑读取的值是否EOF的情况。
其它字符个数总比输入的多1个,如前面朋友所说,那是你的还未初始化的op给变量d增加了1
[解决办法]
:)
[解决办法]
else if(op!= '\n ')
直接写成
else
就好了
这里不用再判断了,因为在
while ((op=getchar())!= '\n ')
这里已经做出了判断,如果op为 '\n '循环就终止了。
[解决办法]
#include <stdio.h>
void main()
{
int a=0,b=0,c=0,d=0;
char op;
do
{
if((op> = 'a '&&op <= 'z ')||(op> = 'A '&&op <= 'Z '))
a++;
else if(op= ' ')
b++;
else if(op> = '0 '&&op <= '9 ')
c++;
else
d++;
op=getchar();
}while(op!= '\n ');
printf( "您输入的英文字母个数为%d\n ",a);
printf( "您输入的空格数为:%d\n ",b);
printf( "您输入数字个数为:%d\n ",c);
printf( "您输入其它字符个数为:%d\n ",d);
}
*********************************************************************
首先你的字符变量没有初始化 char op=?;
其次你把算术运算符和赋值运算符混淆了else if(op== ' ')
而非else if(op= ' ')
其实我没有弄明白你的op是字符变量,因为你在do语句的结尾用了op=getchar();
是在是令我不解,算法在一定上是有问题的,另外编程风格不太好,是一个坏习惯.
程序我没有去调试,相信会有一定的问题,非高效代码!
**********************************************************************
其编程风格可以是(没有考虑算法的正确与否):
#include <stdio.h>
void main()
{
int a=0,b=0,c=0,d=0;
char op=getchar();
do{
if((op> = 'a '&&op <= 'z ')||(op> = 'A '&&op <= 'Z ')) a++;
else if(op== ' ') b++;
else if(op> = '0 '&&op <= '9 ') c++;
else d++;
}while(op!= '\n ');
printf( "您输入的英文字母个数为%d\n ",a);
printf( "您输入的空格数为:%d\n ",b);
printf( "您输入数字个数为:%d\n ",c);
printf( "您输入其它字符个数为:%d\n ",d);
}
[解决办法]
哦,我搞的缩进怎么都没有了,唉,算了
[解决办法]
#include <stdio.h>
void main()
{
int a=0,b=0,c=0,d=0;
char op;
do
{
if((op> = 'a '&&op <= 'z ')||(op> = 'A '&&op <= 'Z '))
a++;
else if(op== ' ')
b++;
else if(op> = '0 '&&op <= '9 ')
c++;
else
d++;
op=getchar();
}while(op!= '\n ');
printf( "您输入的英文字母个数为%d\n ",a);
printf( "您输入的空格数为:%d\n ",b);
printf( "您输入数字个数为:%d\n ",c);
printf( "您输入其它字符个数为:%d\n ",--d);
}
清除空格键--d,if(op== ' ')
[解决办法]
java1028程序错多了,getchar()只能存入一个字符,op=getchar()的结果是把最后一个字符赋给op也就是 "\n ",所以后面的do()while()根本没有执行,出来的结果都是0~用我的程序吧:
#include <stdio.h>
void main()
{
int a=0,b=0,c=0,d=0;
char op;
printf( "请输入一行字符: ");
while ((op=getchar())!= '\n ')
{
if((op> = 'a '&&op <= 'z ')||(op> = 'A '&&op <= 'Z '))
a++;
else if(op== ' ')
b++;
else if(op> = '0 '&&op <= '9 ')
c++;
else
d++;
}
printf( "您输入的英文字母个数为:%d\n ",a);
printf( "您输入的空格数为:%d\n ",b);
printf( "您输入的数字个数为:%d\n ",c);
printf( "您输入的其它字符个数为:%d\n ",++d); /*少个换行加上去*/
}
[解决办法]
还有 op 要定义成 int 类型
int op;