| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1152 人关注过本帖
标题:初学者求助,遇到一个很诡异的问题,百思不得其解,求大佬帮忙!
只看楼主 加入收藏
caodafu
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2019-4-28
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:3 
初学者求助,遇到一个很诡异的问题,百思不得其解,求大佬帮忙!
刚开始学C语言,学到关于for的无限循环时出了问题,以下是内容:
#include <stdio.h>
#include <ctype.h>
int main(void)
{
char answer='N';
double total=0.0;
double value=0.0;
int count=0;


printf("This program calculates the average of any number of value. \n\n");


for(;;) //Indefinite loop
{
printf("\nEnter a value:");
scanf("%lf",&value);
total += value;
++count;


printf("Do you want to enter another value?(Y/N):");

scanf("%c",&answer);


if(tolower(answer)=='n')
break;
}
printf("The average is %.2lf \n\n",total/count);

return 0;

}


以上是照搬教科书上编写的,应该没有问题,测试后也显示问题和风险都是0,然而到了运行该程序的时候,问题来来了,请看下图
图片附件: 游客没有浏览图片的权限,请 登录注册




为什么我感觉在循环里面的printf内容互相串联了?总是出现多余的内容?如图,输入完第一个数字,出现提示选择Y/N,可我没有输入任何选择,就自动出现再次输入数字的提示,还有比如最后我输入了n。break掉它,下面一行居然还出现提示选择Y/N,请问这到底是什么情况呀???是C语言又有了什么新语法吗???另外我用的是win7系统,用的编译器是vc6,编译其他方面都没问题,就是一到编译运行循环的时候就会printf出来一团浆糊,包括用if-goto做的循环也是这种毛病,请问问题到底出在哪里?求大佬指点迷津,感激不尽!!


搜索更多相关主题的帖子: 循环 value printf 出现 输入 
2019-04-28 00:56
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:20 
测试后也显示问题和风险都是0
我猜,你想说的是:编译链接时,无错误,无警告。

scanf("%c",&answer);
应该改为,scanf(" %c",&answer),即在%c前增加一个空白字符。否则你读取到的是回车键。
2019-04-28 08:41
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
如果允许乱七八糟的输入,那代码得改为

程序代码:
#include <stdio.h>

int main(void)
{
    puts( "This program calculates the average of any number of value." );

    double total = 0.0;
    unsigned count = 0;
    for( ; ; )
    {
        printf("Enter a value: ");

        double value;
        if( scanf("%lf",&value) == 1 )
        {
            total += value;
            ++count;
        }
        else
        {
            scanf( "%*[^\n]" );
        }

        printf("Do you want to enter another value?(Y/N):");

        char answer;
        if( scanf(" %c",&answer)!=1 || answer=='N' || answer=='n' )
            break;
        scanf( "%*[^\n]" );
    }

    printf( "The average is %.2lf \n", total/count );
}

2019-04-28 08:50
caodafu
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2019-4-28
收藏
得分:0 
回复 2楼 rjsp
高人呐!!膜拜一下!请收下俺挚诚的感谢!一直以为空格对于计算机理解代码而言根本无关痛痒,才明白一些特别的位置空格原来至关重要,少一个空格整个程序都运行不好了,感谢高人纠正了我这个严重的逻辑误区,敬礼敬礼~~
2019-04-28 12:53
快速回复:初学者求助,遇到一个很诡异的问题,百思不得其解,求大佬帮忙!
数据加载中...
 
   



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

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