标题:急!!!麻烦大家帮忙看一下,这个 for 循环语句哪里错了,自学C语言苦逼一 ...
只看楼主
laok
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2014-6-26
结帖率:0
已结贴  问题点数:20 回复次数:13 
急!!!麻烦大家帮忙看一下,这个 for 循环语句哪里错了,自学C语言苦逼一枚
//Program 4.6 The almost infinite loop--computing an average
#include<stdio.h>
#include<ctype.h>
int main(void)
{
    double total =0.0;
    double value = 0.0;
    unsigned int count = 0;
    char answer = 'n';

    printf("\nThis program calculates the average of any numbers of values.");

    for( ;; )
    {
    printf("\nPlease enter a value you wanna count the average:  ");
        scanf("%lf", &value);
        total += value;
    ++count;
        
        printf("\nDo you wanna enter some more values?(y or n): ");
        scanf("%c", &answer);
    if(answer =='n')
      break;      
    }
     printf("\nThe average of these %d values is %.2lf\n", count, total/count);
     return 0;

}
各位大神,这个程序执行之后,存在2个问题:
1.  for一直是死循环,也就是说,break根本不执行

2.  printf("\nDo you wanna enter some more values?(y or n): ");这个语句无法输入,只是个摆设

急疯了。。。。恳请大家帮忙看看,给个意见,谢谢啊~
搜索更多相关主题的帖子: infinite average include numbers double 
2014-07-19 17:00
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
得分:4 
b不是for的问题,是scanf的问题.
scanf的参数如果是%c的话,会读取上次输入的enter键,从而你的answer不会成为'n'.

关于scanf的一个例子,可以查看一下tonydeng版主的帖子https://bbs.bccn.net/viewthread.php?tid=433433&page=4.

代码测试环境:  WinXP+C-Free5.0.
2014-07-19 18:31
周雪峰
Rank: 1
等 级:新手上路
帖 子:1
专家分:4
注 册:2014-7-19
得分:4 
回复 楼主 laok
你有了if语句,执行if语句里的条件,但是要是不是n怎么办。你这里没说到。
2014-07-19 18:44
饶强c
Rank: 1
等 级:禁止访问
帖 子:15
专家分:7
注 册:2014-7-10
得分:4 
因为你输入数字的时候会用回车键来结束输入,这时候这个回车键被你的answer作为你输入的字符接受了。所以你的if永远无效的,循环不会退出,break不会执行,我帮你改了下,不知道楼主是不是想完成这样的功能。
程序代码:
//Program 4.6 The almost infinite loop--computing an average
#include<stdio.h>
#include<ctype.h>
void main(void)
{
    double total =0.0;
    double value = 0.0;
    unsigned int count = 0;
    char answer = 'n',sign;
    printf("\nThis program calculates the average of any numbers of values.");
    for( ;; )
    {
        printf("\nPlease enter a value you wanna count the average:  ");
        scanf("%lf", &value); 
        total += value;
        ++count;
        sign=getchar();
        printf("\nDo you wanna enter some more values?(y or n): "); 
        scanf("%c", &answer);
        if(answer =='n')
              break;       
    }
    printf("The average of these %d values is %.2lf\n", count, total/count);
}
2014-07-19 18:46
驭风者
Rank: 1
等 级:新手上路
帖 子:1
专家分:4
注 册:2014-7-19
得分:4 
回复 楼主 laok
是不是没有循环条件
2014-07-19 19:19
zhanrongzhen
Rank: 1
等 级:新手上路
帖 子:3
专家分:8
注 册:2014-7-19
得分:4 
因为你输入数字的时候会用回车键来结束输入,这时候这个回车键被你的answer作为你输入的字符接受了。所以你的if永远无效的,循环不会退出,break不会执行,我帮你改了下,不知道楼主是不是想完成这样的功能。//Program 4.6 The almost infinite loop--computing an average
#include<stdio.h>
#include<ctype.h>
void main(void)
{
    double total =0.0;
    double value = 0.0;
    unsigned int count = 0;
    char answer = 'n',sign;
    printf("\nThis program calculates the average of any numbers of values.");
    for( ;; )
    {
        printf("\nPlease enter a value you wanna count the average:  ");
        scanf("%lf", &value);
        total += value;
        ++count;
        sign=getchar();
        printf("\nDo you wanna enter some more values?(y or n): ");
        scanf("%c", &answer);
        if(answer =='n')
              break;      
    }
    printf("The average of these %d values is %.2lf\n", count, total/count);
}[/quote]
程序中的sign=getchr();有什么作用呢,sign得到的值是什么
2014-07-19 19:39
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
得分:0 
回复 6 楼 zhanrongzhen
没用,只是接受enter键的. 完全可以省略. 在那个sign=getchar();那里直接用getchar();就行.

代码测试环境:  WinXP+C-Free5.0.
2014-07-19 20:32
饶强c
Rank: 1
等 级:禁止访问
帖 子:15
专家分:7
注 册:2014-7-10
得分:0 
回复 6 楼 zhanrongzhen
sign是用来吸收输入数据结束时候的回车键字符的,没有什么实际意义,只是这样可以使程序正常运行。
2014-07-19 21:01
孤独一生
Rank: 2
来 自:四川达县
等 级:论坛游民
帖 子:45
专家分:55
注 册:2013-4-1
得分:4 

程序中的sign=getchr();有什么作用呢,sign得到的值是什么
getchar()是一个字符输入函数  sign得到的值是一个字符
2014-07-20 11:50
laok
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2014-6-26
得分:0 
回复 2 楼 vvvcuu
瞬间懂了,谢谢谢谢!
2014-07-20 21:04



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-434202-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.244871 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved