标题:【新人给大家拜年了】请教一个问题
只看楼主
在路上93
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-1-28
结帖率:100%
已结贴  问题点数:20 回复次数:11 
【新人给大家拜年了】请教一个问题
最近在自学C语言,遇到好多问题。
这是一个数学题:任意一个自然数的三次方能写成连续奇数和的形式。

#include<stdio.h>
#include<stdlib.h>
void main()
{
    int b,c;
    int a;
BG:    printf("Please enter an integer number: ");
    scanf("%d",&a);
    if(a>0&&a<=50)
    {
        printf("The opration result is:\n\t%d^3=",a);
        for(c=a-1;c<a;c++)
        {
            for(b=(a*a-a+1);b<=(a*a+a-1);b=b+2)
            {            
                printf("%d",b);
                if(!(b==(a*a+a-1)))
                    printf("+");
                else
                    break;
            }
        }
        printf("\n\n");
        goto BG;
    }
    else
    {
        printf("You entered an error number!\n");
        a=0;
        goto BG;
    }
}

现在问题是如果输入字符(如:abc)则a清零后,返回BG,跳过scanf函数,从而形成死循环,请问这是怎么回事?
如何解决呢?
搜索更多相关主题的帖子: void 自学 include 数学题 number 
2012-01-28 22:04
墨清扬
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:294
专家分:817
注 册:2011-10-4
得分:4 
这是读取的问题。把a=0换成fflush(stdin),清空缓冲区就可以了。另外楼主请不要使用goto语句,也不要让main()返回void,应该设置为int……如果这是从某位谭老师的书上学来的话,最好换一本……

酱油实习生
2012-01-28 22:39
laznrbfe
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:482
专家分:1599
注 册:2011-5-22
得分:4 
回复 2楼 墨清扬
单单改fflush(stdin);还是不行。
2012-01-28 22:52
laznrbfe
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:482
专家分:1599
注 册:2011-5-22
得分:0 
程序代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{
    int b,c;
    int a=0;
   
    while(1)
    {
        printf("Please enter an integer number: ");
        if(scanf("%d",&a)&&a>0&&a<=50)
        {
            printf("The opration result is:\n\t%d^3=",a);
            for(c=a-1;c<a;c++)
            {
                for(b=(a*a-a+1);b<=(a*a+a-1);b=b+2)
                {           
                    printf("%d",b);
                    if(!(b==(a*a+a-1)))
                        printf("+");
                    else
                        break;
                }
            }
            printf("\n\n");
        }
        else
        {
            printf("You entered an error number!\n");
            fflush(stdin);
        }
    }
    return 1;
}
根据楼上的进行修改的。
2012-01-28 22:53
laznrbfe
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:482
专家分:1599
注 册:2011-5-22
得分:0 
回复 4楼 laznrbfe
根据2楼修改的。
2012-01-28 23:37
在路上93
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-1-28
得分:0 
回复 2楼 墨清扬
我是看谭老师的书,不是说main函数不被谁调用么? 为什么要有返回值呢?
2012-01-31 23:08
laoguanfy
Rank: 1
等 级:新手上路
帖 子:5
专家分:8
注 册:2010-7-17
得分:4 
建议楼主换本书,比如C primer Plus之类的,就明白了
2012-02-01 10:51
linxiaobo
Rank: 2
等 级:论坛游民
帖 子:20
专家分:20
注 册:2012-1-7
得分:4 
main()不能被自己程序内模块调用,外面的程序可以调用,不然dos怎么启动程序
2012-02-01 13:15
墨清扬
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:294
专家分:817
注 册:2011-10-4
得分:0 
回复 6楼 在路上93
系统调用啊…………用void有时不会错,但是新标准早就禁了,用int肯定正规。还有,不要看谭浩强的书………………

酱油实习生
2012-02-01 13:28
BianChengNan
Rank: 8Rank: 8
等 级:贵宾
威 望:13
帖 子:302
专家分:972
注 册:2011-11-30
得分:4 
怎么都说谭浩强的书不好啊

我的群:149544757 C/C++/Assembly 喜欢交流的朋友进,进群请写消息
2012-02-01 14:20



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




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

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