求C语言高手帮忙!!!看看这段程序错在哪了?!

#include <stdio.h>
void main()
{int num=0;
char ch;
printf("input enter to end input <enter>\n");
while(ch=getchar()!='\n')
{if(ch>='0'&&ch<='9')
{putchar(ch);num=num+1;}
}
printf("Number=%d",num);}

不管输入什么,运行结果都是 Number=0

问题在哪?为什么?说的详细一点,谢了~!

ch=getchar()!='\n'

判断优先级高于赋值
所以你这里ch不是0就是1
所以根本不会到if(ch>='0'&&ch<='9') 这个判断里
num又怎么可能会增加呢追问

是不是说 ,ch得到的0或1,并不是字符型‘0’或‘1’ ?

追答

对,因为C语言的判断语句的结果不是0就是1,数字的,传递给字符型那就是ascii码,跟字符'0','1'没有任何关系

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-06-07
#include <stdio.h>
void main()
{int num=0;
char ch;
printf("input enter to end input <enter>\n");
while(ch!='\n')
{ch=getchar();
if(ch>='0'&&ch<='9')
{putchar(ch);num=num+1;}
}
printf("Number=%d",num);
}
把赋值语句单写就可以,或者使用上面的方法,仅供参考!
第2个回答  2011-06-07
while(ch=getchar()!='\n')
//改为下面,目的是保证先赋值还判断。
while((ch=getchar())!='\n')追问

ch=getchar()!='\n'这个的话,就是先判断后面的了。那么,如果输入 7,ch=1吗

追答

1
如果是
ch=getchar()!='\n'; //没有while
输入7,ch=0

2
如果是
while(ch=getchar()!='\n'); //有while
输入7,ch=1 //输入7,你肯定要按回车。

追问

如果是
while(ch=getchar()!='\n'); //有while
输入7,ch=1
这个情况下,Number应该等于1才对啊。。。?

追答

不伦输什么,都等于1。只要保证输完按回车。

追问

可是,不管输入什么。。运行结果都是0不是1啊。。。

追答

while(ch=getchar()=='\n'); //!=改为==

大佬帮忙看看这个程序错在哪了,刚学C语言?
int main(){int price=0; \/\/该处由‘,’改为‘;’printf("请输入金额(元) :") ;\/\/该处缺少分号scanf("%d",&price);int change=100-price;printf("找您%d元。\\n",change);return 0;} 运行结果如下:

一道c语言编程题求大神解答,找一下我错在哪了,谢谢了?
错误1:宏定义最后没有分号,将#define D 500;改为#define D 500 错误2:l不是整数,因此将l定义为int型就错了 错误3:既然规定输入格式为P=,那么输入时就不能直接输入数值,而应在数值之前输入P=,例如输入P=6000 另外,程序的不妥之处:1、利润不一定是整数,因此将P定义为int型不妥 2、i...

关于C语言的,高手帮我看看这段程序哪错了,为什么用tuberC2.0运行说for...
一看你程序看到这里 define NUM_RATES (sizeof(value)\/sizeof(value[0])我就一头雾水了,VALUE是啥?然后看到下面,哦,是个数组,但要告诉你的是预定义是在编译的时候才会知道你的VALUE是什么东东,现在它不知道你的VALUE是啥(因此value[0]是错的),况且你的VALUE还在下面,不过就算在上面也是不...

各位C语言高手教教我 我这程序错在哪里
{ int a,b,c;scanf("%d,%d,%d",&a,&b,&c);if (a+b>c&&a+c>b&&b+c>a){ if(a==b&&b==c) printf("dbsjx");else if(a==b||a==c||b==c) printf("dysjx");else if(a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a) printf("zjsjx");else printf("...

C语言开关灯问题,麻烦大神们帮我看看这个程序哪里错了啊,结果不对...
两个错误:1、int a[6000]={1};这句。你这只是将a[0]赋值1,其他都是0,数组默认以0填充,应该改为:int a[6000];for(i=0;i<6000;i++)a[i]=1;2、第二层循环里:if(a[j]==0)a[j]=1;if(a[j]==1)a[j]=0;这个语句把所有的灯都关闭了,因为如果关了,就打开;打开后又...

C语言大虾们,给我看看这段程序哪错啦!为什么编译时总出现下列错误? expe...
C语言中的语句需要用分号结束应该知道吧!?你的条件语句中的语句sign赋值都没有用分号结束,这是错误之一!还有,我想你这个程序实现的功能是不是当输入的数值非0时sign=1;当输入的数值是0时sign=0!?如果是的话,你的条件语句需要用大括号包括起来,因为你所要求的条件满足时需要执行的语句是两条...

关于C语言编写程序的一个疑问 高手帮忙看看我的程序哪错了
看了你的代码觉得,你在C语言的语法规则上还有待提高啊,在此举出你所给出的代码的若干错误。首先,你的代码不完整。第9、11、13行要定义三个100行的二维字符数组,如果仅仅是类似char adj[100][12]={"开心的"}的定义;这样adj[1]到adj[99]这99个词都会是空值(ASCII码为0),若用printf()...

C语言简单程序,帮看看哪错了
最后输出-a那段语句后面没有写“;”;定义变量a时为双精度浮点数,而输入时存为了单精度浮点数,存在溢出故障,会导致运行错误,见下图:应该改为如下 include<stdio.h> main(){ double a;printf("请输入一个实数:");scanf("%lf",&a);if(a>=0)printf("%f\\n",a);else printf("%f\\n",...

C语言菜鸟跪求大神告知这个程序哪里错了。。。T^T
scanf("%1f,%1f,%1f",&a,&b,&c);这句有问题,应该改为%lf,而不是1f,lf代表输入双精度浮点型数据,如果是1f,就只会取输入的数字的第一位;希望我的答案对你有帮助!

c语言的大虾们,看看这段程序出现了什么错误?为什么编译时出现expected...
sign 赋值的时候没有加 ;结尾 第二,你的if后面是一个复合语句,所以要加大括号

相似回答