注册 登录
编程论坛 C++教室

为什么这个程序只能运行一次,帮忙看一下。

keqiang 发布于 2008-06-22 20:37, 2391 次点击
这个程序的问题:只能第一次运行成功,第二次以上它都自动运行了,看问题出在哪里。我正在找...........
#include <iostream.h>
int main()
{
for(int i=1;i<10;i++)
{
int a=0,b=0;
float c=0;
cout<<"输入一组数字,求其平均值,输入完毕时,输入ok即可。"<<endl;
for(;;)
{
cout<<"输入这组的第"<<b+1<<"个数据:";
cin>>a;
if(a==char()) break;
b=b+1;
c=c+b;
}
cout<<"这"<<b+1<<"组数的平均值:"<<c/b<<endl;
}
}
20 回复
#2
keqiang2008-06-22 21:57
#3
keqiang2008-06-23 12:50
#4
lefttime2008-06-23 15:19
你用的是VC++编译器吧,char()只是判断为0;
还有
...
c=c+b;
...
让人很纳闷你的程序是否在求前N项和的平均值
#5
kongwei2542008-06-23 17:11
类型有问题
#6
keqiang2008-06-23 18:22
四楼和五楼知道问题在哪吗?这个程序运行第一次是没问题的,只是后面的循环都自动运行了,c=c+b应该没问题的。
#7
keqiang2008-06-23 18:27
我还在找........................
我还在找.............
#8
keqiang2008-06-23 18:41
#9
守鹤2008-06-24 12:01
很有问题吗,运行不玩了
#10
alittlepig2008-06-24 15:54
回复 9# 守鹤 的帖子
if(a==char()) break;这句话有问题啊!改成if( a == 12345) break,或任何其他一个数都可以,char()用法错了.还有,输入的数是a,怎么用c = c + b计算输入的数的总和阿?改成c = c + a才对吧?这样改以后,我运行了一下,没问题的.
#11
alittlepig2008-06-24 15:55
回复 1# keqiang 的帖子
if(a==char()) break;这句话有问题啊!改成if( a == 12345) break,或任何其他一个数都可以,char()用法错了.还有,输入的数是a,怎么用c = c + b计算输入的数的总和阿?改成c = c + a才对吧?这样改以后,我运行了一下,没问题的.
#12
keqiang2008-06-24 18:19
用数字来结束输入计算平均值,这种方法我也试过了,是可以的啊。但我想输入ok结束,这就出现问题了。谁发现问题在哪啊?
#13
chinaxy112008-06-24 21:58
回复 5# kongwei254 的帖子
我运行了下没有错的,只要你不是输入的字符串,
楼上说的对,但是你那if( a == char()) break中。显得很幼稚。既然你设定了a为int,输入字符就出错。不用你做判断。还不如在数字间做判断。
#14
viseven2008-06-25 12:42
#15
liuwuyue2008-06-25 13:29
我直接重写了一个
#include <cstdlib>
#include <iostream>
#include <cstring>

using namespace std;

int main(int argc, char *argv[])
{
    double x=0 ;//输入的数字
    double s=0;//和
    double average =0;//平均数
    char num[15],*p=num; //输入的字符串
    int i=0 ;//顺序记录
    cout<<"输入quit退出 并计算平均数\n";
    while(1){
            
            cout<<"请输入第 "<<i+1<<" 个数据并回车 "<<endl;
            cin>>p ;
            if(strcmp(p,"quit")==0)
            break;
            x = atof(p);
            i++;
            s=s+x;
 
           }
           
    if(i==0)
    average = 0;
    else      
    average = s/i;
    cout<<"共输入 "<<i<<" 个数 。平均数为\t"<<average<<endl;
    system("PAUSE");
   return EXIT_SUCCESS;
}
#16
keqiang2008-06-27 12:29
谢谢十五楼。十五楼可以在我那个程序的基础上,编一个以ok结束,并无错运行。
#17
luxiaoli2008-06-27 16:50
首先,char()用错。它只是判断是不是为空。
在者,你最好选用if(!cin),来判断是不是输入正确;
最后,还要加上清空cin的函数
#18
keqiang2008-06-27 18:50
不懂楼上说什么
#19
czf1102008-07-05 14:29
if(a==char()) break;
b=b+1;
c=c+b


if(a==0) break;///
b=b+1;
c=c+a;///
#20
poppylx2008-07-05 23:47
函数运行前 先将stream清空试试
#21
ytunx2008-07-09 05:36
问题就出在 cin>>a
你定义的变量a为整型,如果你输入非整型,将会导致重新读取输入缓冲区,如果缓冲区没有清空,那就不可避免无限循环。
程序可以执行一次,是因为输入数据合法,但最后一个ok要了你程序的命,这个ok就留在缓冲区中,再次cin>>a,问题就出来了,不用你输入,缓冲区中就已经有数据了,而且是非法的,出错是难免的!
解决这些问题,就是在输入时做除错处理,就是检查输入类型是否可法,只有合法数据才可以被赋值。
1